我正在处理非常大的矩阵。我想保留矩阵的行,其中90%的条目大于10。 由于我对R不熟悉,有人会帮我实现吗?
答案 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)
您可以使用apply
和all
来检查哪些行包含所有元素&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,]