r - 在data.Table中使用反向选择按引用删除多列

标签 r data.table

<分区>

我想使用引用删除不在列表中的列。

library("data.table")
df <- data.frame("ID"=1:10,"A"=1:10,"B"=1:10,"C"=1:10,"D"=1:10)
setDT(df,key="ID")
list_to_keep <- c("ID","A","B","C")
df[,!names(df)%in%list_to_keep,with=FALSE]

给我选择要删除的列,但是当我这样做时:

df <- data.frame("ID"=1:10,"A"=1:10,"B"=1:10,"C"=1:10,"D"=1:10)
setDT(df,key="ID")
list_to_keep <- c("ID","A","B","C")
df[,!names(df)%in%list_to_keep:=NULL,with=FALSE]

我得到 LHS of := isn't a column names ('character' or positions ('integer' or 'numeric')。正确的做法是什么?

最佳答案

我们可以使用setdiff 获取不在list_to_keep 中的数据集的names 并赋值(:= ) 为 NULL

df[, setdiff(names(df), list_to_keep) := NULL]

正如@rosscova 提到的,在逻辑vector 上使用which 可用于获取列的位置并将列分配给NULL

df[, which(!names(df)%in%list_to_keep):=NULL] 

关于r - 在data.Table中使用反向选择按引用删除多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45054654/

相关文章:

r - 如何在 R-package 中正确包含依赖项?

r - 如何计算堆叠条形图中的百分比?

r - 过滤 data.table 的日期问题 - 适用于固定日期但不适用于变量

r - 仅聚合 data.table 中的连续行

R 带条件和重置的累积总和

r - 具有对数刻度和自定义中断的直方图

r - 在 R 中使用不均匀数据帧创建二进制矩阵

r - R3.3.2 中的错误 : evaluation nested too deeply: infinite recursion/options(expressions=)?

R 以错误消息 : This application has requested the Runtime to terminate it in an unusual way 终止

r - 带向量函数的数据表聚合,取 2