如何过滤掉条目小于特定值的矩阵行

时间:2014-08-05 18:13:20

标签: r

我正在处理非常大的矩阵。我想保留矩阵的行,其中90%的条目大于10。 由于我对R不熟悉,有人会帮我实现吗?

2 个答案:

答案 0 :(得分:3)

我只会使用rowSums和常用比较运算符。

这是一个最小的例子:

set.seed(1); m <- matrix(sample(50, 100, TRUE), ncol = 10)
rowSums(m > 10) == ncol(m)
#  [1]  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
m[rowSums(m > 10) == ncol(m), ]
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,]   14   11   47   25   42   24   46   17   22    12
# [2,]   29   35   33   25   40   22   23   18   20    33

要采用分数法,请尝试以下方法:

m[rowSums(m > 10) >= (.9 * ncol(m)), ]

答案 1 :(得分:3)

您可以使用applyall来检查哪些行包含所有元素&gt; 10

big.mat <- matrix(rnorm(1000000, 20, 8), 1000, 1000)
# Apply a function to each row of the matrix 
# (so we pass 1 to apply, 2 would be columns)
# all returns TRUE if all of the element of the vector we pass 
# to it are TRUE
good.lines <- apply(big.mat, 1, function(x){all(x>10)})
# Lines that have > 90% elements > 10
good.lines.90 <- apply(big.mat, 1, function(x){perc <- sum(x>10)/length(x); perc>0.9})

filtered.mat <- big.mat[good.lines,]
filtered.mat.90 <- big.mat[good.lines.90,]