如果任何所选变量包含data.table

时间:2018-02-01 14:55:50

标签: r data.table apply grepl

如果任何选择的变量以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:=命令中使用grepl(使用max来获取"如果有的话,#34;方面)来编写新变量。类似的东西:

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

但是如果数据中有A,则为所有观察值分配1,并且我知道这是不正确的,因为apply将提供向量。此外," max"这样做的方式似乎很乱。我怎么说"如果这些列中的任何一个以A开头,那么将变量letterA设为1,否则为#34;

1 个答案:

答案 0 :(得分: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