【问题标题】:Select rows equal to or less than maximum value (i.e. delete trailing maximums) with group_by in R在 R 中使用 group_by 选择等于或小于最大值的行(即删除尾随最大值)
【发布时间】: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_nslice_min/maxselectfilter,但无法弄清楚。我知道它非常简单,但不能完全到达那里。非常感谢您的帮助。

【问题讨论】:

  • 最好显示预期的输出。你需要df %&gt;% group_by(Group1) %&gt;% filter(cumsum(c(0, diff(Value)) &lt; 0) &lt; 1)
  • 谢谢@akrun。我已经添加了我的预期输出问题。

标签: r dplyr


【解决方案1】:

我们可以使用match 获取每个组的第一个'max' 'Value' 的索引,获取sequence 并在slice 中使用它

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

【讨论】:

  • 谢谢@akrun!我不会想到将 match 和 seq 一起使用。这也适用于我的真实数据集!!!非常感谢!
猜你喜欢
  • 2016-09-30
  • 2016-07-13
  • 2019-05-09
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2010-11-27
相关资源
最近更新 更多