【问题标题】:use column-name range in data.table like in dplyrs select在 data.table 中使用列名范围,如 dplyrs select
【发布时间】:2015-06-11 08:20:27
【问题描述】:

我想从 data.table 中选择多个列(具有 1200 个列名),按列名指定范围,就像使用 dplyr 可以做的那样,例如:

library(data.table)
library(dplyr)
dt <- data.table(w = sample(100, 50),
       x = sample(100, 50),
       y = sample(100, 50),
       z = sample(100, 50))

select(dt, w:y)

目前我正在使用以下解决方法:

cols_to_select <- names(select(dt, w:y))
dt[ ,cols_to_select, with = FALSE]

我认为使用列号的另一种选择(例如dt[ , 1:3, with = FALSE] 可能会导致讨厌的错误。 选择名称的另一个选项是:

dt[ , .SD, .SDcols = cols_to_select]

如果有下面这样的东西,那就太棒了:

dt[ , .(w:y)]

有没有更好的方法来做到这一点?如果不是为什么?如果这个问题更好地放在 data.table 的 github-issues 中,请告诉我

【问题讨论】:

  • select_vars(names(dt), w:y) 可能比names(select(dt, w:y))
  • 为什么?因为你有更多选择?
  • 开发版中不是已经有了吗?
  • dt[, w:y, with=FALSE] 应该适用于 1.9.5..

标签: r data.table dplyr


【解决方案1】:

我所要求的可以在 data.table (1.9.5) 的开发版本中实现,如new feature 17 号所示。引用:

  1. .SDcols 和 with=FALSE 现在理解 colA:colB 形式。即DT[, lapply(.SD, sum), by=V1, .SDcols=V4:V6] 和DT[, V5:V7, with=FALSE] 按预期工作。这对于交互非常有用 采用。关闭 #748。

开发版的安装说明here

感谢@AnandaMahto 和@Arun 指出这一点!

同样使用来自 dplyr 的select_vars(names(dt), w:y) 可能比@shadow 指出的names(select(dt, w:y)) 更好,因为它提供了更多选择名称的选项,更具可读性并且更清楚地传达了意图。

【讨论】:

  • Arun——data.table 开发人员之一,不是 akrun :-)
  • 谢谢 :) :D,至少我知道他是 data.table-developers 之一^^
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 2015-06-13
  • 2015-02-13
相关资源
最近更新 更多