150

我们如何使用它们的数字索引(位置)的向量来选择多列data.table

这就是我们对 a 的处理方式data.frame

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

5 回答 5

191

对于data.table >= 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]
#    b c
# 1: 2 3

# select single column by name
dt[, "a"]
#    a
# 1: 1

# select multiple columns by name
dt[, c("a", "b")]
#    a b
# 1: 1 2

对于data.table < 1.9.8的版本(需要使用数字列选择with = FALSE),请参阅此答案的此先前版本。另见关于 v1.9.8 的新闻,潜在的重大变化,第 3 点。

于 2012-11-14T17:28:02.677 回答
45

这有点冗长,但我已经习惯了使用隐藏.SD变量。

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

这有点麻烦,但是您不会失去其他 data.table 功能(我不认为),因此您仍然应该能够使用其他重要功能,例如连接表等。

于 2015-05-05T20:28:45.483 回答
40

如果要使用列来选择列,只需使用.(),它是 的别名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:
#    b c
# 1: 2 3
# 2: 3 4
于 2015-08-16T20:57:26.550 回答
20

从 v1.10.2 开始,您还可以使用..

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

keep_cols = c("a", "c")

dt[, ..keep_cols]
于 2017-05-02T06:48:13.903 回答
3

@Tom,非常感谢您指出这个解决方案。这对我很有效。

我正在寻找一种方法来从打印和上面的示例中排除一​​列。要排除第二列,您可以执行以下操作

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)]
于 2015-11-04T08:46:04.167 回答