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

使用apply函数仅获取在R中通过阈值的行,r,apply,R,Apply,我试图对我的数据(以矩阵的形式)应用一个过滤器,比如说10列200行 我只想保留方差系数大于阈值的行。但在我的代码中,它似乎打印了通过阈值的行的方差系数。我希望它只是测试是否通过阈值,但打印矩阵中的原始数据点 covar <- function(x) ( sd(x)/mean(x) ) evar <- apply(myMatrix,1,covar) myMatrix_filt_var <-myMatrix[evar>2,] covar如果m是你的矩阵,那么 m[appl

我试图对我的数据(以矩阵的形式)应用一个过滤器,比如说10列200行

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

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

covar如果
m
是你的矩阵,那么

m[apply(m, 1, function(x) sd(x)/mean(x) > 2), ]
应该给你过滤矩阵。其想法是获得每行的变异系数,并检查其内部是否大于2。这将返回一个逻辑向量,通过像
m[logical_vector,]
那样直接访问它,我们可以得到条件为真的那些行


如果您想在计算
sd
mean
时删除na值,可以使用
na.rm=TRUE
,我不认为您所做的有任何错误。但我不认为您所做的是错的。我不知道你的代码为什么不起作用。它给了我与你的代码相同的结果。也许你只得到了一个元素,它符合阈值。试试
myMatrix[eval>2,drop=FALSE]
。事实上我知道我做错了什么。我没有打印原始矩阵,而是打印方差系数。