Ошибка ifelse, fread и внутри функции: если вы хотите sh перезапустить RHS, используйте rep () - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь сделать следующее утверждение ifelse. Моя цель - создать новый столбец, в котором я смогу идентифицировать лиц с одинаковым значением в четырех столбцах.

example<-data.frame(replicate(4,sample(1:2,20,rep=TRUE)))

within(example,example$X <- ifelse(example$X1!=example$X2,NA,
                                 ifelse(example$X2!=example$X3,NA,
                                        ifelse(example$X3!=example$X4,NA,example$X1))))

В моем случае четыре столбца - это годы. Я хочу идентифицировать людей группы. С моими данными код выглядит следующим образом:

within(educ_1,educ_1$X <- ifelse(educ_1$N2014!=educ_1$N2015,NA,
                                 ifelse(educ_1$N2015!=educ_1$N2016,NA,
                                   ifelse(educ_1$N2016!=educ_1$N2017,NA,educ_1$N2014))))

Однако я получаю следующую ошибку:

Ошибка в [<-.data.table (*tmp*,, nl, значение = список (educ_1 = список (PER_ID = c (9.95048326217056e-313): поставлено 67 элементов, которые должны быть назначены 14191305 элементам столбца «educ_1». Если вы хотите sh для «переработки» RHS, используйте rep (), чтобы сделать это понятным для читателей вашего кода.

Одна вещь заключается в том, что я использовал функцию fread для импорта данных, так как это около 14 миллионов наблюдений, тогда я думал, что это будет более эффективно .

Есть ли какие-либо мысли или предложения по поводу синтаксиса или ошибки? Что мне делать ?. Почему он работает с простыми утверждениями, но не с моими собственными данными?

вывод примера

1 Ответ

0 голосов
/ 31 января 2020

Используя синтаксис data.table, вы можете сделать:

setDT(example) # Shouldn't be necessary if you used fread() to import the data
example[, 
        X := uniqueN(unlist(.SD)) == 1, 
        by = 1:nrow(example),
        .SDcols = patterns("X[0-9]")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...