如果任何选择的变量以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;
答案 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