R:通过引用从data.table中删除列,不带名称

R:通过引用从data.table中删除列,不带名称,r,data.table,R,Data.table,这几乎是一个复制品。我想从数据表中删除列,但我想高效地这样做。我有一个要保留的列的名称列表。所有相关问题的答案都意味着做类似于 data.table.new <- data.table.old[, my.list] 但是,由于我有一个列的白名单,而不是黑名单,我需要遍历所有列名,检查它们是否在my.list中,然后应用set()。有没有更干净的/其他的方法可以做到这一点?不确定是否可以通过引用data.frame上的操作而不使其成为data.table。 下面的代码应该是工作的,如果你考

这几乎是一个复制品。我想从数据表中删除列,但我想高效地这样做。我有一个要保留的列的名称列表。所有相关问题的答案都意味着做类似于

data.table.new <- data.table.old[, my.list]
但是,由于我有一个列的白名单,而不是黑名单,我需要遍历所有列名,检查它们是否在
my.list
中,然后应用
set()
。有没有更干净的/其他的方法可以做到这一点?

不确定是否可以通过引用data.frame上的操作而不使其成为data.table。
下面的代码应该是工作的,如果你考虑使用.

库(data.table)
setDT(data.frame.old)

dropcols使用变量名的
setdiff
?mnel答案的可能重复很容易扩展到drop多个列的情况(使用
toDrop
类似于Jan的答案中的
dropcols
),我认为
setdiff
更适合
dropcols
的构造,但是我个人习惯了
不在
向量子集中为什么
dropcols:=NULL
不起作用?
c
在做什么?@Farrel它对字符向量求值
dropcols
。您的代码将无法工作,因为它将尝试删除名为“dropcols”的列,而不是
dropcols
变量存储的列名。它不需要是
c(dropcols)
,它可以是
(dropcols)
,也可以计算变量。
set(data.table.old, j = 'a', value = NULL)
library(data.table)
setDT(data.frame.old)
dropcols <- names(data.frame.old)[!names(data.frame.old) %in% my.list]
data.frame.old[, c(dropcols) := NULL]