如果任何所选变量包含 data.table 中的给定字符串,则创建变量 1

Create variable that is 1 if any of chosen variables contain given string in data.table

如果在 data.table.

中任何所选变量以给定字符串(示例中的 "A")开头,我想创建变量 1

一个用玩具数据来说明问题的例子:

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

我的尝试是在 data.table := 命令中的 apply 中使用 grepl(最大选择 "if any" 方面)来编写新变量。类似于:

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

但是如果数据中有 A,这会将 1 分配给所有观察值,我知道这是不正确的,因为应用将提供一个向量。此外,"max" 的做法似乎很混乱。我怎么说"if any of these columns starts with A then make the variable letterA a 1 and 0 otherwise"?

试试这个:

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