有没有办法在 dplyr 中选择具有不同条件的组中的第一行?

pvi*_*l00 2 r dplyr tidyverse

我想为变量a创建的每个组选择一行。它应该是变量c具有最高值的行,但如果变量b为 TRUE,则应选择该组内 b = TRUE 且 c 最大的行。

我有以下代码:

set.seed(42)
a <- rep(1:3, each = 3)
b <- sample(c(0,1), size = 9, replace = T) 
c <- sample(1:9, size = 9, replace = F)

df <- data.frame(a = a, 
                 b = b,
                 c = c)

df %>% group_by(a) %>% filter(b == 1) %>% 
       arrange(desc(c), .by_group = T) %>% 
       summarise_all(function(x) x[1]) -> df1

df %>% group_by(a) %>% filter(all(b != 1)) %>% 
       arrange(desc(c), .by_group = T) %>% 
       summarise_all(function(x) x[1]) -> df2 

df3 <- rbind(df1, df2)
Run Code Online (Sandbox Code Playgroud)

这是可行的,但我想知道是否有更简单的方法来实现相同的目的。

MrF*_*ick 7

您可以过滤组的值,然后进行汇总。

df %>% 
  group_by(a) %>% 
  filter(all(b==0) | b==1) %>% 
  summarize(b = first(b), c = max(c))
#       a     b     c
#   <int> <dbl> <int>
# 1     1     0     8
# 2     2     1     5
# 3     3     1     9
Run Code Online (Sandbox Code Playgroud)

所以我们只保留每组的值,如果b==1或者如果所有b==0