Создайте переменную, которая равна 1, если любая из выбранных переменных содержит заданную строку в data.table

Я хотел бы создать переменную, которая равна 1, если любая из выбранных переменных начинается с заданной строки ("A" в примере) в data.table.

Пример с игрушечными данными, чтобы понять суть:

library(data.table)
DT=as.data.table(matrix(c(LETTERS[seq( from = 1, to = 9 )],rep("A",3)), nrow=3, ncol=4))

Мои попытки состоят в том, чтобы использовать grepl внутри приложения команды data.table := (с максимальным значением аспекта «если есть») для записи новой переменной. Что-то вроде:

DT[,letterA:= max(apply(.SD,2,grepl,pattern= "^A" )), .SDcols=c("V1","V2")]  

но это присваивает 1 всем наблюдениям, если в данных есть A, и я знаю, что это неверно, поскольку приложение предоставит вектор. Кроме того, «максимальный» способ сделать это кажется грязным. Как я могу сказать: «Если какой-либо из этих столбцов начинается с A, тогда сделайте переменную letterA равной 1 и 0 в противном случае»?


person Noah Hammarlund    schedule 01.02.2018    source источник


Ответы (1)


Попробуй это:

DT[,letterA:=Reduce("|",lapply(.SD,grepl,pattern= "^A" )), 
            .SDcols=c("V1","V2")]
#   V1 V2 V3 V4 letterA
#1:  A  D  G  A    TRUE
#2:  B  E  H  A   FALSE
#3:  C  F  I  A   FALSE
person nicola    schedule 01.02.2018