首页 > 解决方案 > 在 R 中使用 data.table,我可以从表中选择变量列的向量吗?

问题描述

假设我有一个像这样的表:

> A = data.table(c(1,2,3),c(4,5,6),c(7,8,9))
> A
    V1 V2 V3
1:  1  4  7
2:  2  5  8
3:  3  6  9

我想选择第一行的第一列,第二行的第二列和第三行的第三列,得到结果:

> B
[1] 1 5 9

我试过类似的东西:

B = A[,c(1,2,3)]

但这不起作用。是否有可能做到这一点?(显然在我的实际用例中,每一行的列索引都是变量,但我可以保证向量的长度等于表中的行数)

标签: rdata.table

解决方案


对元素进行子集化的矢量化方法是将行索引和列索引提供为矩阵

as.data.frame(A)[cbind(seq_len(nrow(A)), 1:3)]
#[1] 1 5 9

或转换.SDmatrixdata.frame并使用行/列索引

A[, as.matrix(.SD)[cbind(1:3, 1:3)]]

或者 in ,在循环中data.table传递i,索引并提取元素j

A[, unlist(Map(function(i, j) .SD[i, j, with = FALSE], 1:3, 1:3), 
          use.names = FALSE)]

推荐阅读