R data.table 以变量为列名进行行子集筛选的问题咨询
正确写法如下
首先明确测试场景:我们已创建测试用data.table:
library(data.table) dt = data.table(x1 = 1:5, x2 = 11:15)
需要用存储了列名的变量var = "x1"作为筛选条件的列,筛选x1 == 1的行。
方法1:使用get()函数(最常用,兼容性最好)
这是最简单的写法,get()会在当前data.table的作用域中查找对应列名的列:
var = "x1" dt[get(var) == 1]
方法2:正确使用eval()指定求值环境
你之前的eval写法错误是因为默认求值环境不在data.table内,eval出来的是字符串"x1"而非对应列,需要指定求值环境为.SD(代指当前data.table本身):
dt[eval(as.name(var), envir = .SD) == 1]
方法3:高版本data.table(1.14.3及以上)推荐的env参数写法
这种写法可读性更强,执行效率也更高,是data.table官方推荐的动态参数写法:
dt[col == 1, env = list(col = var)]
以上三种写法都可以得到正确的筛选结果。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

