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

时间:2015-07-07 11:26:04

标签: r data.table

几乎this的副本。我想从数据表中删除列,但我想有效地完成它。我有一个我想保留的列名列表。链接问题的所有答案都意味着做类似于

的事情
data.table.new <- data.table.old[, my.list]

在某些关键点上会给我一个新对象,而旧对象仍在内存中。但是,我的data.table.old非常庞大,因此我更喜欢通过引用来执行此操作,如建议here

set(data.table.old, j = 'a', value = NULL)

但是,由于我有列的白名单而不是黑名单,我需要遍历所有列名称,检查它们是否在my.list中,然后应用set()。有没有更清洁/其他方式呢?

1 个答案:

答案 0 :(得分:5)

不确定您是否可以在data.frame上通过引用操作而不使其成为data.table。
如果您考虑使用data.table,则代码应该有效。

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]