使用apply函数仅获取在R中通过阈值的那些行

时间:2013-03-29 19:49:29

标签: r apply

我正在尝试对我的数据(以矩阵形式)应用过滤器,例如10列,200行。

我想只保留方差系数大于阈值的那些行。但是根据我的代码,它似乎打印了通过阈值的行的方差系数。我希望它只测试它是否超过阈值,但是在矩阵中打印原始数据点。

covar <- function(x) ( sd(x)/mean(x) )
evar <- apply(myMatrix,1,covar)
myMatrix_filt_var <-myMatrix[evar>2,]

此处设定的阈值为2。

我做错了什么?对不起,只是学习R。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果m是您的矩阵,那么,

m[apply(m, 1, function(x) sd(x)/mean(x) > 2), ]

应该给你过滤矩阵。想法是获得每行的变异系数,并检查它是否>&gt; <2> 。这将返回一个逻辑向量,通过直接访问它,如m[logical_vector, ],我们可以得到条件为TRUE的那些行。

如果您想在计算na.rm = TRUEsd时删除NA​​值,可以使用mean