如何使用data.table
中数字索引(位置)的向量选择多个列?
我们如何处理data.frame
:
df <- data.frame(a = 1, b = 2, c = 3)
df[ , 2:3]
# b c
# 1 2 3
答案 0 :(得分:177)
对于 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
的数字列选择),请参阅此答案的this previous version。另请参阅NEWS,v1.9.8中的变化/可能发生的变化/点2.
答案 1 :(得分:40)
它有点冗长,但我已经习惯使用隐藏的.SD
变量。
b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]
这有点麻烦,但你不会失去其他data.table功能(我不认为),所以你仍然可以使用其他重要的功能,如连接表等。
答案 2 :(得分:36)
如果您想使用列名称来选择列,只需使用.()
,这是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
答案 3 :(得分:15)
从v1.10.2起,您还可以使用..
dt <- data.table(a=1:2, b=2:3, c=3:4)
keep_cols = c("a", "c")
dt[, ..keep_cols]
答案 4 :(得分: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)]