如何在data.table的set()函数中引用现有列并适配管道操作?
用data.table结合管道创建新列的解决方案
你遇到的问题是set()函数无法直接识别data.table里的列名,因为它的参数不会自动绑定到传入的data.table环境中。下面是几种纯data.table工具的解决方法:
方法一:结合[语法与管道(推荐)
直接用.指代管道传递过来的data.table对象,沿用data.table原生的:=赋值语法,这是最符合data.table习惯的写法:
iris %>% setDT() %>% .[, newcol := toupper(Species)]
方法二:修正set()函数的列引用
明确引用管道传入的data.table中的列,让set()能找到目标列:
iris %>% setDT() %>% set(j = "newcol", value = toupper(.[["Species"]]))
这里.[["Species"]]就是从管道传递的data.table中提取Species列,避免了全局环境查找的问题。
补充说明
- 方法一本质上是把原生的
dt[, newcol := ...]通过管道改写,.代表前一步的结果,完全保留了data.table的高效赋值特性。 - 上述两种方法都不依赖dplyr,纯用data.table工具实现需求。
内容的提问来源于stack exchange,提问作者Vasily A
相关产品推荐
相关产品推荐

