我有一个矩阵,使得初始行为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
答案 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])]