数据帧列中的R计数值大于零

Hen*_*enk 2 r count dataframe

我有数据框:

mat=data.frame(A=c(12,10,0,14,0,60),B=c(0,0,0,0,13,65))
Run Code Online (Sandbox Code Playgroud)

问题是:如何过滤掉过量零的列[例如> 50%]?例如,必须删除B列.

使用nrow(mat)*0.5设置阈值然后删除高于该阈值的零计数的列将会很棒.

Rei*_*son 5

这是一种方式:

> mat <- data.frame(A=c(12,10,0,14,0,60),B=c(0,0,0,0,13,65))
> 
> keep <- (colSums(mat > 0) / nrow(mat)) > 0.5
> keep
    A     B 
 TRUE FALSE 
> 
> mat[, keep, drop = FALSE]
   A
1 12
2 10
3  0
4 14
5  0
6 60
Run Code Online (Sandbox Code Playgroud)

  • 甚至`保持< - (colMeans(mat> 0)> 0.5)`(括号不必要,但我喜欢它们); 因为它是一个数据框,所以`mat [keep]`应该可以工作. (3认同)