【发布时间】:2021-06-17 06:24:06
【问题描述】:
当使用group_by 时,我试图在达到最大值后删除所有观察值(行)。换句话说,我只想选择每组中等于或小于最大值的观察值。我有一个类似于下面的数据集,我想在其中group_by(Group1, Group2)
UID<-1:30
Group1<-c(rep("jedi", 10), rep("sith", 10), rep("powerless", 10))
Group2<-c(rep("blue", 5), rep("green", 5), rep("purple", 5), rep("red", 5), rep("yellow", 5), rep("orange", 5))
Value<- c(1,2,3,3,3,0,0,1,1,1,1,1,1,2,3,0,2,4,4,4,2,3,3,5,5,0,3,5,5,5)
df<-data.frame(UID, Group1, Group2, Value)
我的预期输出是这样的;
UID.Expected<-c(1,2,3,6,7,8,11,12,13,14,15,16,17,18,21,22,23,25,26,27,28)
df.expected <- df %>% filter(UID %in% UID.Expected)
我尝试过top_n、slice_min/max、select 和filter,但无法弄清楚。我知道它非常简单,但不能完全到达那里。非常感谢您的帮助。
【问题讨论】:
-
最好显示预期的输出。你需要
df %>% group_by(Group1) %>% filter(cumsum(c(0, diff(Value)) < 0) < 1) -
谢谢@akrun。我已经添加了我的预期输出问题。