我正在尝试对我的数据(以矩阵形式)应用过滤器,例如10列,200行。
我想只保留方差系数大于阈值的那些行。但是根据我的代码,它似乎打印了通过阈值的行的方差系数。我希望它只测试它是否超过阈值,但是在矩阵中打印原始数据点。
covar <- function(x) ( sd(x)/mean(x) )
evar <- apply(myMatrix,1,covar)
myMatrix_filt_var <-myMatrix[evar>2,]
此处设定的阈值为2。
我做错了什么?对不起,只是学习R。
谢谢!
答案 0 :(得分:1)
如果m
是您的矩阵,那么,
m[apply(m, 1, function(x) sd(x)/mean(x) > 2), ]
应该给你过滤矩阵。想法是获得每行的变异系数,并检查它是否>&gt; <2> 。这将返回一个逻辑向量,通过直接访问它,如m[logical_vector, ]
,我们可以得到条件为TRUE的那些行。
如果您想在计算na.rm = TRUE
和sd
时删除NA值,可以使用mean
。