根据标准计算群组的数量/份额

时间:2017-03-08 12:45:51

标签: r filter dplyr aggregate

我有以下数据框架结构:

admDatabaseConnector

我希望计算每个 Score V1 V2 V3 ... 1 12 15 0 2 17 25 13 3 0 0 18 1 0 12 25 3 11 41 0 3 18 0 0 组(在我的示例中为1/2/3)和每列(V1 / V2 / V3 ...)的值大于的行数0.

所以,我想得到以下结果:

score

我开始使用 Score V1 V2 V3 ... 1 50% 100% 50% 2 100% 100% 100% 3 67% 33% 33% 来解决它,但我坚持使用过滤部分:

dplyr

1 个答案:

答案 0 :(得分:0)

对于基数R,我们可以使用aggregate,对于每个Score,我们可以计算大于0的值与值总数的比率。

aggregate(.~Score, hun, function(x) length(x[x>0])/length(x) * 100)

#Score        V1        V2        V3
#1     1  50.00000 100.00000  50.00000
#2     2 100.00000 100.00000 100.00000
#3     3  66.66667  33.33333  33.33333

我不确定dplyr是否有更好的选择。但是,一种类似的方式是

library(dplyr)
hun %>%
 group_by(Score) %>%
 summarise_each(funs(length(.[.>0])/length(.) * 100))