如何通过字符串变量指定列名筛选data.table中符合条件的行
解决data.table中用字符串变量筛选列值的问题
你遇到的问题很典型——直接在筛选条件里写variable==TRUE时,R会把variable当成普通字符串(也就是"V3")和TRUE比较,这显然不成立,所以DT3会返回空表。要让DT3和DT2结果一致,需要把字符串变量转换成data.table对应的列引用,这里有几种常用的有效方法:
方法1:使用get()函数
get()可以根据字符串名称获取对应的对象,在这里就是获取data.table中名为variable值的列:
variable <- "V3" DT <- data.table(V1=c(1,5,9),V2=c("a","b","c"),V3=c(TRUE,FALSE,TRUE)) DT2 <- DT[V3==TRUE] DT3 <- DT[get(variable) == TRUE] DT3 # 现在和DT2结果完全一致
方法2:使用双括号索引列
通过双括号直接提取目标列的向量,再进行条件判断:
DT3 <- DT[DT[[variable]] == TRUE]
方法3:使用eval(as.name())组合
as.name()把字符串转换成对应列的符号,eval()执行这个符号来引用目标列:
DT3 <- DT[eval(as.name(variable)) == TRUE]
以上任意一种方法执行后,DT3都会得到和DT2相同的结果:
V1 V2 V3 1: 1 a TRUE 2: 9 c TRUE
内容的提问来源于stack exchange,提问作者Eugen
相关产品推荐
相关产品推荐

