通过数字索引选择 data.table 中的多个列

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

这就是我们如何处理 data.frame:

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

对于 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点。

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

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

这有点麻烦,但是您不会失去 data.table 的其他特性(我不这么认为) ,所以您仍然应该能够使用其他重要的函数,比如连接表等。

如果要使用列 名字来选择列,只需使用 .(),这是 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

@ 汤姆,非常感谢你提出这个解决方案。 对我很有效。

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

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)]

从1.10.2版本开始,您还可以使用 ..

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


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


dt[, ..keep_cols]