我有一个数据框
data <- data.frame(1:4,5:8,9:12,13:16)
我有一个列索引列表
col_index <- c(1,4,3,2)
对于每一行,我想选择列索引中指定的单元格,并返回以下值列表:1、8、11、14。
执行此操作的最佳方法是什么?
答案 0 :(得分:1)
您可以使用slice.index:
> slice.index(data,1)
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 2 2 2 2
[3,] 3 3 3 3
[4,] 4 4 4 4
然后构造一个矩阵
> matrix(rep(col_index,4),4,4,byrow=TRUE)
[,1] [,2] [,3] [,4]
[1,] 1 4 3 2
[2,] 1 4 3 2
[3,] 1 4 3 2
[4,] 1 4 3 2
创建蒙版
> slice.index(data,1) == matrix(rep(col_index,4),4,4,byrow=TRUE)
[,1] [,2] [,3] [,4]
[1,] TRUE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE TRUE
[3,] FALSE FALSE TRUE FALSE
[4,] FALSE TRUE FALSE FALSE
最终
> data[slice.index(data,1) == matrix(rep(col_index,4),4,4,byrow=TRUE)]
[1] 1 8 11 14