如何在 dplyr 调用中通过两个变量进行 group_by() ?

问题描述 投票:0回答:1

我得到的是周 (wk) 的平均值,但是,第 21 周没有全部数据,所以我想 改为按“月”获取平均值。如何将 group_by(wk) 切换为 group_by(month) 相同的 dplyr 调用?第 21 周的最终结果应该是 5.8。

library(dplyr)
fish <- structure(list(wk = c(20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 
21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22), month = c(5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6), pd = c(6, 
4, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 10, 
4, 5, NA, 6)), row.names = c(NA, -21L), class = "data.frame")

fish %>% group_by(wk) %>% summarise(Mean = mean(pd, na.rm=T))

# A tibble: 3 x 2
     wk   Mean
  <dbl>  <dbl>
1    20   5   
2    21 NaN   
3    22   6.25
r dplyr
1个回答
0
投票

您不能激活 2 个不同的分组,但您可以执行以下操作:

fish |> 
  mutate(month_mean = mean(pd, na.rm = TRUE)) |>
  group_by(wk) |>
  summarise(Mean = coalesce(mean(pd, na.rm=T), first(month_mean)))
# # A tibble: 3 × 2
#      wk  Mean
#   <dbl> <dbl>
# 1    20  5   
# 2    21  5.83
# 3    22  6.25
© www.soinside.com 2019 - 2024. All rights reserved.