这几乎是this的副本。我想从数据表中删除列,但我想有效地完成它。我有一个我想保留的列名列表。链接问题的所有答案都意味着做类似于
的事情data.table.new <- data.table.old[, my.list]
在某些关键点上会给我一个新对象,而旧对象仍在内存中。但是,我的data.table.old
非常庞大,因此我更喜欢通过引用来执行此操作,如建议here
set(data.table.old, j = 'a', value = NULL)
但是,由于我有列的白名单而不是黑名单,我需要遍历所有列名称,检查它们是否在my.list
中,然后应用set()
。有没有更清洁/其他方式呢?
答案 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]