基于列索引对R数据帧进行切片

时间:2020-06-23 00:15:31

标签: r

我有一个数据框

data <- data.frame(1:4,5:8,9:12,13:16)

我有一个列索引列表

col_index <- c(1,4,3,2)

对于每一行,我想选择列索引中指定的单元格,并返回以下值列表:1、8、11、14。

执行此操作的最佳方法是什么?

1 个答案:

答案 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