【发布时间】:2017-07-12 10:06:28
【问题描述】:
我想使用引用删除不在列表中的列。
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')。这样做的正确方法是什么?
【问题讨论】:
-
不确定
data.table,但在基础R 中,您需要使用which(!names(df)%in%list_to_keep)。现在你只得到一个布尔向量,你需要一个位置向量。 -
@Kenji,为什么
:=NULL排队df[,!names(df)%in%list_to_keep:=NULL,with=FALSE] ? -
@ParthChaudhary 我不想复制数据表,因此
:=NULL通过引用而不是赋值删除 -
@Kenji,好的,由于
DT的使用,请通过引用删除 -
我看不出它怎么可能与另一个问题重复。虽然另一个问题的部分答案可能会解决我的问题,但问题本身在以下方面有所不同:1)它没有专门要求通过引用删除列。 2)它没有专门要求反向选择。另一个问题的主要答案类似于
df <- df[list_to_keep],它根本没有回答我的问题。
标签: r data.table