如何删除 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 <- c("mpg", "cyl"); > 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生成新的数据列(基于已有数据列)生成多个数据列