如何删除 data.table 中的多个列?

Posted

技术标签:

【中文标题】如何删除 data.table 中的多个列?【英文标题】:How to delete multiple columns in data.table? 【发布时间】:2022-01-13 17:50:38 【问题描述】:

是否可以使用 data.table 通过引用删除多个列?

以下均无效

library(data.table);
dt <- mtcars %>% setDT

# THESE ARE NOT RUNNABLE
dt[, range := NULL, with = F]
dt[, (range) := NULL, with = F]
dt[, ..range:=NULL]
dt[, ':='(.SD=NULL), .SDcols=range] 
dt[, lapply(.SD, NULL), .SDcols=range] 
dt[, ':='(mget(range)):=NULL]

你能帮忙吗?

PS。最终,对于上面的每一行,我想知道它何时可以使用或何时不能使用(显然,它们不能用于删除一系列列,但它们可以用于选择或分配值to,一系列列)

【问题讨论】:

什么是range。也许range &lt;- c("mpg", "cyl"); &gt; dt[, (range) := NULL]; names(dt) [1] "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb" 【参考方案1】:

如果range 类似于 1:3,那么您可以这样做...

range<-1:3

DT1[,(names(DT1)[range]):=NULL]

set(DT1, j=range, value=NULL)

【讨论】:

【参考方案2】:

试试这个:

library(data.table)

dt = data.table(mtcars)

dt[, `:=`(wt=NULL, hp=NULL, disp=NULL, am=NULL, gear=NULL, carb=NULL)]

输出:

> head(dt)
    mpg cyl drat  qsec vs
1: 21.0   6 3.90 16.46  0
2: 21.0   6 3.90 17.02  0
3: 22.8   4 3.85 18.61  1
4: 21.4   6 3.08 19.44  1
5: 18.7   8 3.15 17.02  0
6: 18.1   6 2.76 20.22  1

或者如 akrun 所写:

range = c("wt", "hp", "disp", "am", "gear", "carb")
dt[, (range):=NULL]

【讨论】:

以上是关于如何删除 data.table 中的多个列?的主要内容,如果未能解决你的问题,请参考以下文章

如何基于 data.table 中的分类变量以编程方式创建二进制列?

R语言中如何删除某行某列的某个数据(注:只删一个数据而不是整列整行)?如4 行 7列

如何在data.table中使用某些列名的字符向量选择列?[重复]

R语言data.table导入数据实战:data.table生成新的数据列(基于已有数据列)生成多个数据列

使用 data.table 包滚动平均值到 R 中的多个变量

从R中的data.table中删除带有NA的行[重复]