包含值的列的子集矩阵

时间:2019-07-13 01:48:11

标签: r

我有一个矩阵,使得初始行为1:5 后一行是应用于前一行的函数的分步迭代。

例如:

 [,1] [,2] [,3] [,4] [,5]
    1    2    3    4    5
   34   21   27   62    4
   17    4    5    1   12

所以最后一行是最后一次迭代,并说第一列是初始值1逐渐变为34然后变为17等的过程。

我该如何对其进行子集化,以便获得所有包含4的列?

 [,1] [,2] [,3] 
    2    4    5 
   21   62    4
    4    1   12

1 个答案:

答案 0 :(得分:2)

我们可以将矩阵与4进行比较,使用colSums并选择其中至少有4个的列。

mat[,colSums(mat == 4) > 0]

#     [,1] [,2] [,3]
#[1,]    2    4    5
#[2,]   21   62    4
#[3,]    4    1   12

或者我们也可以将apply与列any一起使用

mat[,apply(mat == 4, 2, any)]

由于which可以返回逻辑向量的行列索引,因此我们可以在mat == 4处获取列值,并对该列的unique值进行子集化。

mat[,unique(which(mat==4, arr.ind = TRUE)[,2])]