首页 文章

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

提问于
浏览
131

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

这是我们如何处理 data.frame

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

5 回答

  • 35

    它已经习惯了使用隐藏的 .SD 变量 .

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

    这有点麻烦,但你不会失去其他data.table功能(我不认为),所以你仍然可以使用其他重要的功能,如连接表等 .

  • 38

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

    对于 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 .

  • 2

    @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)]
    
  • 167

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

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

相关问题