如何在R中按_group进行汇总,不包括group的值

wkyowqbh  于 2023-09-27  发布在  其他
关注(0)|答案(3)|浏览(105)

在dplyr中汇总时,是否有方法排除一组数据?

df=data.frame(Group=c("A","A","B","B"),Value=c(1,2,3,4))
Result=df %>% group_by(Group) %>% summarise(max = max(Value), exclude(Group))

预期成果应当是:

A 4
B 2

4为排除A组所有数据后的最大值,B组为维克

h79rfbju

h79rfbju1#

另一个 dplyr 的努力,使用与链接的 data.table 答案类似的逻辑,它引用每个分组操作中的整个数据集和当前分组变量:

df %>% 
  group_by(Group) %>% 
  summarise(maxval = max(df$Value[df$Group != cur_group()[[1]]]) )
## A tibble: 2 × 2
#  Group maxval
#  <chr>  <dbl>
#1 A          4
#2 B          2
holgip5t

holgip5t2#

你可以通过组来获取最大值,然后再迭代取最大值,排除当前组:

library(purrr)
library(dplyr)

df %>%
  summarise(max = max(Value),.by = Group) |>
  mutate(max = map_dbl(Group, \(x) max(max[Group != x])))

  Group max
1     A   4
2     B   2
eufgjt7s

eufgjt7s3#

library(dplyr)
distinct(df, Group1 = Group) %>%
  tidyr::crossing(df) %>%
  filter(Group != Group1) %>%
  summarize(max = max(Value), .by = Group1)

  Group1   max
  <chr>  <dbl>
1 A          4
2 B          2

相关问题