我想知道如何从数据框中删除少于(假设为5)非零条目的行。R:删除行数小于某个阈值的非零值
我来最接近的是:
length(which(df[1,] > 0)) >= 5
但如何将其应用到整个数据帧丢弃是假的人?是否有一个函数类似于excel中的COUNTIF()函数,我可以在这里应用?
谢谢你的帮助。
我想知道如何从数据框中删除少于(假设为5)非零条目的行。R:删除行数小于某个阈值的非零值
我来最接近的是:
length(which(df[1,] > 0)) >= 5
但如何将其应用到整个数据帧丢弃是假的人?是否有一个函数类似于excel中的COUNTIF()函数,我可以在这里应用?
谢谢你的帮助。
可以在rowSums
和[
使用布尔值:
df[ rowSums(df > 0) >= 5, ]
有隐藏在这个表达式3个步骤:
df > 0
产生一个矩阵具有值TRUE其中元件> 0rowSums
返回每行的非零元素的数目(当它将TRUE值设为1并将FALSE值设为0时)[
仅选择线,其中的非零元素的数量> = 5也可以使用一个for循环。
我们首先创建一个零和一个矩阵来测试我们的代码。第2行必须被排除,因为它具有少于5个非零值。
在循环中,我们计算每行非零值的数量,如果小于5则为TRUE,否则为FALSE。名为'drop'的向量包含哪些行为TRUE,然后FALSE的信息。在最后一步中,我们排除那些drop == TRUE的行。
mat <- matrix(c(1,1,1,1,0,1,1,1,1,1,1,1,1,1,1), nrow=3, ncol=5)
mat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 1 0 1 1 1
[3,] 1 1 1 1 1
drop <- NULL
for(i in 1:NROW(mat)){
count.non.zero <- sum(mat[i,]!=0, na.rm=TRUE)
drop <- c(drop, count.non.zero<5)
}
mat[!drop==TRUE,]
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 1 1 1 1 1
注意:na.rm==TRUE
允许此脚本在您的数据包含缺失值时工作。
你的意思是'> ='而不是'=>'对吗? – SabDeM