这几乎与此重复.我想从数据表中删除列,但我想有效地完成它.我有一个我想保留的列名列表.联系问题的所有答案都意味着做类似的事情
data.table.new <- data.table.old[, my.list]
Run Code Online (Sandbox Code Playgroud)
在某些关键点上会给我一个新对象,而旧对象仍在内存中.然而,我data.table.old是巨大的,因此我更喜欢通过引用来做到这一点,如此处所示
set(data.table.old, j = 'a', value = NULL)
Run Code Online (Sandbox Code Playgroud)
但是,由于我有列的白名单,而不是黑名单,我需要遍历所有列名,检查它们是否在my.list,然后应用set().有没有更清洁/其他方式这样做?
不确定是否可以通过 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]
Run Code Online (Sandbox Code Playgroud)