You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在dplyr调用中切换分组变量?周数据缺失时改按月份求均值

解决方案:按周分组计算均值,无有效数据时自动切换为月均值

方法一:用ifelse判断替换

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 %>%
  # 按月份分组,计算当月pd均值并添加到每行
  group_by(month) %>%
  mutate(month_mean = mean(pd, na.rm = TRUE)) %>%
  # 按周分组,判断周均值是否有效,无效则用月均值替换
  group_by(wk) %>%
  summarise(Mean = ifelse(is.nan(mean(pd, na.rm = TRUE)), unique(month_mean), mean(pd, na.rm = TRUE)),
            .groups = "drop")

方法二:用coalesce简化替换逻辑

coalesce会自动返回第一个非缺失/非NaN的值,代码更简洁:

fish %>%
  group_by(month) %>%
  mutate(month_mean = mean(pd, na.rm = TRUE)) %>%
  group_by(wk) %>%
  summarise(Mean = coalesce(mean(pd, na.rm = TRUE), unique(month_mean)),
            .groups = "drop")

运行结果

# A tibble: 3 x 2
     wk  Mean
  <dbl> <dbl>
1    20   5  
2    21   5.8
3    22   6.25

逻辑说明

  1. 先按month分组计算当月的pd均值,确保每个周都能关联到所属月份的均值
  2. 再按wk分组计算周均值,当周内无有效pd数据(均值为NaN)时,自动替换为对应月份的均值
  3. .groups = "drop"用于取消分组,输出整洁的结果表格

内容的提问来源于stack exchange,提问作者Salvador

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:45:01