2015-06-11 17 views
2

我想从一个data.table选择多个列(具有1200列名)列名指定一个范围,如一个可以用做dplyr,例如:使用列名范围在data.table像dplyrs选择

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] 

我认为使用COL-数的其他选项(例如dt[ , 1:3, with = FALSE]可能导致讨厌的错误。选择名称的选项是:

dt[ , .SD, .SDcols = cols_to_select] 

这将是超真棒,如果有类似以下内容:

dt[ , .(w:y)] 

有没有更好的方式来做到这一点?如果不是为什么?如果这个问题更好地放在data.table的github问题上,让我知道

+0

'select_vars(名称(DT),W:Y)'可能比'名称(选择(DT,W:Y))更好' – shadow

+0

为什么呢?因为你有更多的选择? – grrgrrbla

+0

是不是已经存在的开发版本? – A5C1D2H2I1M1N2O1R2T1

回答

3

我所要求的是在data.table(1.9.5)的开发版本中可能的,可以在new feature号码中看到17.引用:

  • .SDcols并用= FALSE理解可乐:COLB形式现在。也就是说,DT [,lapply(.SD,总和),由= V1,.SDcols = V4:V6]和DT [,V5:V7, 与= FALSE]按预期工作。这是互动 使用非常有用。关闭#748。
  • 的开发版本的安装说明here

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

    还利用dplyr select_vars(names(dt), w:y)可能优于names(select(dt, w:y))由@shadow指出,因为它提供了更多的选择,选择将姓名,更具可读性,更明确地传达的意图。

    +0

    阿伦 - 的'data.table'开发商之一,而不是akrun :-) – A5C1D2H2I1M1N2O1R2T1

    +0

    感谢:):d,至少我知道他是data.table-developers ^^之一 – grrgrrbla