我有以下格式的数据。我必须找到每个组中前25%的值的总和-按ID分组。
如果对应于组中前25%的数字是分数,请提供该分数的ceil(较高数字)的数据
ID Value
3 10
3 83
1 13
2 62
2 26
3 63
3 37
1 17
3 22
3 41
3 45
2 65
3 63
1 45
2 71
3 61
2 97
2 89
3 72
3 16
1 22
虽然我可以使用下面的代码获得前n行,但我还没有找到一种方法来获得每个组中前n%的结果
p2<-group_by(data, ID) %>%
mutate(rank = rank(desc(Value))) %>%
arrange(rank) %>%
filter(rank <= 3)
预期结果看起来像这样。数据中有4行ID为1-前25%表示1行。
有6行ID为2-ceil(0.25 * 6)为2-因此前2行。同样,对于ID 3,有11行-ceil(0.25 * 11)是ID 3下的前3行。
请让我知道如何获取此信息!
ID Value
1 45
2 97
2 89
3 83
3 72
3 65
答案 0 :(得分:6)
我们可以按照arrange
的降序顺序Value
数据帧,然后根据每个组的比率slice
行数。
library(dplyr)
df %>%
arrange(desc(Value)) %>%
group_by(ID) %>%
slice(1:ceiling(0.25 * n()))
# ID Value
# <int> <int>
#1 1 45
#2 2 97
#3 2 89
#4 3 83
#5 3 72
#6 3 63
我们也可以在基数R中进行此操作。首先order
行基于Value
的行,split
行基于ID
的行,然后选择顶部{{1} }每组中的行。
n