使用变量名选取R data.table列:结果与直接索引不一致
为什么data.table中用变量索引列没得到预期结果?
这个问题我之前也踩过坑,其实是data.table对j参数(也就是逗号后面的部分)的解析规则在起作用!
问题根源
- 当你直接写
test[, 1]时,data.table会把这个数值1直接识别为列的位置索引,所以会返回表的第一列col1。 - 但当你把索引存在变量
idx <- 1,再写test[, idx]时,data.table的逻辑是:先在当前data.table的列里找有没有叫idx的列——你的表显然没有,它就会去全局环境找这个变量,然后直接返回变量的值1,而不是把它当作索引去匹配对应列。
解决办法
这里给你几种可行的处理方式:
用
..前缀:这个前缀会告诉data.table去父环境(比如全局环境)查找变量,并且把它当作列索引来使用:test <- data.table(col1 = c("A", "B", "C", "D"), col2 = c(1,2,3,4)) idx <- 1 test[, ..idx]用
.SDcols配合.SD:.SDcols用来指定要选择的列,.SD代表选中的列组成的子表:test[, .SD, .SDcols = idx]用
get()函数结合列名:先通过索引拿到列名,再用get()取出对应列:test[, get(names(test)[idx])]
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

