通过数字索引在data.table中select多个列

我们如何使用data.table中的数字索引(位置)向量来select多列?

这是我们如何处理data.frame

 df <- data.frame(a = 1, b = 2, c = 3) df[ , 2:3] # bc # 1 2 3 

对于data.table >= 1.9.8 1.9.8的版本,以下全部工作:

 library(data.table) dt <- data.table(a = 1, b = 2, c = 3) # select single column by index dt[, 2] # b # 1: 2 # select multiple columns by index dt[, 2:3] # bc # 1: 2 3 # select single column by name dt[, "a"] # a # 1: 1 # select multiple columns by name dt[, c("a", "b")] # ab # 1: 1 2 

对于data.table < 1.9.8 1.9.8的版本(数列select需要使用with = FALSE ),请参阅此答案的此前版本 。 另见新闻 ,v1.9.8的变化/潜在的变化/点2。

如果要使用列select列,只需使用.() ,它是list()的别名:

 library(data.table) dt <- data.table(a = 1:2, b = 2:3, c = 3:4) dt[ , .(b, c)] # select the columns b and c # Result: # bc # 1: 2 3 # 2: 3 4 

这有点冗长,但我已经习惯了使用隐藏的.SDvariables。

 b<-data.table(a=1,b=2,c=3,d=4) b[,.SD,.SDcols=c(1:2)] 

这是一个麻烦,但你不会失去其他data.tablefunction(我不认为),所以你应该仍然可以使用其他重要的function,如连接表等

从v1.10.2开始,你也可以使用..

 dt <- data.table(a=1:2, b=2:3, c=3:4) keep_cols = c("a", "c") dt[, ..keep_cols] 

@Tom,非常感谢你指出这个解决scheme。 这对我很好。

我正在寻找一种方法,从打印和上面的例子中排除一列。 要排除第二列,你可以做这样的事情

 library(data.table) dt <- data.table(a=1:2, b=2:3, c=3:4) dt[,.SD,.SDcols=-2] dt[,.SD,.SDcols=c(1,3)] 

你也可以考虑dplyr软件包。 它允许使用更简单的结构来处理dataframe。 一个例子是使用select命令,我可以通过名字只抓取我想要的数据框中的variables

select(.data,var1,var7,var12)

动词在dplyr中使用