【问题标题】:How to delete multiple columns in data.table?如何删除 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"

标签: r data.table


【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 2012-05-21
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      相关资源
      最近更新 更多