объединение переменных столбца с одинаковыми значениями в новую переменную
comment
Я предполагаю, что это было бы похоже на оператор ifelse, так что новая составная переменная будет считаться истиной, если эта строка наблюдения записала истину для любого из 9 типов нарушений правил экзамена, записанных в наборе данных, если еще (например, если нет истинные выходы для любого из 9 типов нарушений в учебе), тогда новая составная переменная будет считаться ложной, поскольку в этой строке наблюдения не было совершено никаких нарушений на экзамене.
- person Christopher Hahn   schedule 05.12.2015
comment
или, возможно, как функция слияния?
- person Christopher Hahn   schedule 05.12.2015
comment
эта таблица не является общедоступной или для тех, у кого есть доступ по ссылкам
- person MichaelChirico   schedule 05.12.2015
comment
исправили проблему со ссылкой! пожалуйста, дайте мне знать, есть ли что-нибудь еще, что я могу предоставить, чтобы облегчить ответ на мой вопрос
- person Christopher Hahn   schedule 05.12.2015
comment
это смоделированный набор данных? вам, вероятно, не разрешено делиться этими данными, если это реальные студенты, и вы находитесь в США (из-за FERPA)
- person MichaelChirico   schedule 05.12.2015
comment
да, этот набор данных смоделирован
- person Christopher Hahn   schedule 05.12.2015
Ответы (2)
Чтобы создать составную строку, которая проверяет любые ИСТИННЫЕ значения в других столбцах фрейма данных, используйте функцию any()
, заключенную в apply()
, чтобы перемещаться строка за строкой. Я думаю, вы можете применить это к своей ситуации:
#Makes a dataframe with TRUE/FALSE values and a low chance for TRUE
set.seed(123)
data <- data.frame(
Exams_A = sample(c(TRUE,FALSE), 10, TRUE, c(.1, .9)),
Exams_B = sample(c(TRUE,FALSE), 10, TRUE, c(.1, .9)),
Exams_C = sample(c(TRUE,FALSE), 10, TRUE, c(.1, .9)),
Exams_D = sample(c(TRUE,FALSE), 10, TRUE, c(.1, .9)),
Exams_E = rep(TRUE,10) # Inserts row of all TRUE's to show that you can limit scope
)
data$ExamMC <- apply(data[, 1:4], 1, function(x) any(x))
data$ExamMC <- apply(data[, 1:4], 1, any) # This is the updated version
# ^ This part sets what columns you want to search
person
Andrew Jackson
schedule
05.12.2015
Спасибо за ваш ответ! Я обнаружил, что это очень полезно для меня, поэтому ценю вашу помощь. оба ответа дали мне лучшее понимание R в целом
- person Christopher Hahn; 06.12.2015
У меня проблемы с поиском правильного использования части функции (x) в этой последней строке кода, есть ли страница, где я могу прочитать об использовании функции (x)?
- person Christopher Hahn; 07.12.2015
На самом деле я просто запустил код без части
function(x)
, и он работает до тех пор, пока вы удалите (x)
из any
. Я обновил код, чтобы показать это. Вы можете посмотреть ?apply
для получения дополнительной информации, но я понимаю, что если вы передаете что-то функции, которую вызываете с помощью apply()
, или хотите создать свою собственную функцию, которая принимает строку как данные для обработки, вам нужно добавить бит function(x) ...
.
- person Andrew Jackson; 07.12.2015
хорошо, поэтому я вынул часть (x) для any () и получаю обратную связь, которая выглядит примерно так: [[1]] function (..., na.rm = FALSE) .Primitive (any) [[ 2]] функция (..., na.rm = FALSE) .Primitive (any) [[3]] function (..., na.rm = FALSE) .Primitive (любой)
- person Christopher Hahn; 07.12.2015
Я не уверен на 100%, что вам нужно, но вот как я бы сделал то, что, как я думаю, вы задумали:
library(data.table)
setDT(surveySP15)
exams <- paste0("Exams_", LETTERS[1:9])
surveySP15[ , paste0(exams, "_binary") :=
lapply(.SD, function(x) x %in% c("1 time", "2-4 times", ">4 times")),
.SDcols = exams]
Это создаст переменную для каждого экзамена (например, Exams_A_binary
), которая будет (logical
) TRUE
, если она закодирована в данных как 1 или более раз, и FALSE
в противном случае. Вот соответствующий результат:
> surveySP15[ , paste0(exams, "_binary"), with = FALSE]
Exams_A_binary Exams_B_binary Exams_C_binary Exams_D_binary Exams_E_binary Exams_F_binary Exams_G_binary
1: FALSE FALSE FALSE FALSE FALSE FALSE FALSE
2: FALSE FALSE FALSE FALSE FALSE FALSE FALSE
3: FALSE FALSE FALSE FALSE FALSE FALSE FALSE
4: FALSE FALSE FALSE FALSE FALSE FALSE FALSE
5: FALSE FALSE FALSE FALSE FALSE FALSE FALSE
---
223: FALSE FALSE FALSE FALSE FALSE FALSE FALSE
224: TRUE TRUE TRUE FALSE TRUE FALSE FALSE
225: FALSE TRUE FALSE FALSE FALSE FALSE FALSE
226: FALSE FALSE FALSE FALSE FALSE FALSE FALSE
227: FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Exams_H_binary Exams_I_binary
1: FALSE FALSE
2: FALSE FALSE
3: FALSE FALSE
4: FALSE FALSE
5: FALSE FALSE
---
223: FALSE FALSE
224: FALSE FALSE
225: FALSE FALSE
226: FALSE FALSE
227: FALSE FALSE
person
MichaelChirico
schedule
04.12.2015
Спасибо за ваш ответ! это действительно помогает мне понять, где я ошибся. Я ценю помощь!
- person Christopher Hahn; 06.12.2015