分组项目,并从每个分组中找到前n%

时间:2019-05-06 07:38:19

标签: r dataframe group-by

我有以下格式的数据。我必须找到每个组中前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

1 个答案:

答案 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