我有一个大小为5000 * 5000的矩阵,90%的值为0.在排除' 0'之后,是否有现成的解决方案可用于计算该矩阵的均值,中位数。 ?
一个原始解决方案是将所有0更改为NA并使用
median(x, na.rm=TRUE)
另一个解决方案是手动扫描矩阵并创建另一个包含值的向量,然后计算平均值,中位数等。
还有其他更好的选择吗?
答案 0 :(得分:10)
如果您想要整体矩阵的中位数和平均值,请尝试按照
median(x[x>0])
mean(x[x>0])
如果你想要中位数和平均行
apply(x,1,function(x){mean(x[x>0])})
apply(x,1,function(x){median(x[x>0])})
如果你想要中位数和意味着明智的
apply(x,2,function(x){mean(x[x>0])})
apply(x,2,function(x){median(x[x>0])})