用R中的group_by选择等于或小于最大值的行(即删除后面的最大值)
当使用用R中的group_by选择等于或小于最大值的行(即删除后面的最大值),r,dplyr,R,Dplyr,当使用group\u by时,我试图在达到最大值后删除所有观察值(行)。换句话说,我只想在每组中选择等于或小于最大值的观察值。我有一个类似于下面的数据集,其中我想groupby(Group1,Group2) UID我们可以使用match来获取每组第一个“最大”值的索引,获取sequence并在切片中使用它 library(dplyr) df %>% group_by(Group1, Group2) %>% slice(seq(match(max(Value), Val
group\u by
时,我试图在达到最大值后删除所有观察值(行)。换句话说,我只想在每组中选择等于或小于最大值的观察值。我有一个类似于下面的数据集,其中我想groupby(Group1,Group2)
UID我们可以使用match
来获取每组第一个“最大”值的索引,获取seq
uence并在切片中使用它
library(dplyr)
df %>%
group_by(Group1, Group2) %>%
slice(seq(match(max(Value), Value))) %>%
ungroup %>%
arrange(UID) %>%
as.data.frame
-输出
# UID Group1 Group2 Value
#1 1 jedi blue 1
#2 2 jedi blue 2
#3 3 jedi blue 3
#4 6 jedi green 0
#5 7 jedi green 0
#6 8 jedi green 1
#7 11 sith purple 1
#8 12 sith purple 1
#9 13 sith purple 1
#10 14 sith purple 2
#11 15 sith purple 3
#12 16 sith red 0
#13 17 sith red 2
#14 18 sith red 4
#15 21 powerless yellow 2
#16 22 powerless yellow 3
#17 23 powerless yellow 3
#18 24 powerless yellow 5
#19 26 powerless orange 0
#20 27 powerless orange 3
#21 28 powerless orange 5
最好显示预期产出。您是否需要df%>%groupby(Group1)%>%filter(累计(c(0,差异(值))<0)<1)
谢谢@akrun。我已经在问题中添加了我的预期输出。谢谢@akrun!我不会想到同时使用match和seq。这也适用于我的真实数据集!!!非常感谢你!
library(dplyr)
df %>%
group_by(Group1, Group2) %>%
slice(seq(match(max(Value), Value))) %>%
ungroup %>%
arrange(UID) %>%
as.data.frame
# UID Group1 Group2 Value
#1 1 jedi blue 1
#2 2 jedi blue 2
#3 3 jedi blue 3
#4 6 jedi green 0
#5 7 jedi green 0
#6 8 jedi green 1
#7 11 sith purple 1
#8 12 sith purple 1
#9 13 sith purple 1
#10 14 sith purple 2
#11 15 sith purple 3
#12 16 sith red 0
#13 17 sith red 2
#14 18 sith red 4
#15 21 powerless yellow 2
#16 22 powerless yellow 3
#17 23 powerless yellow 3
#18 24 powerless yellow 5
#19 26 powerless orange 0
#20 27 powerless orange 3
#21 28 powerless orange 5