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

如何为含无效值的分组填充前一组的可靠平均值?

高效解决方案

可以通过dplyr结合tidyr的向量化操作实现,避免循环,处理大数据集也高效:

library(dplyr)
library(tidyr)

# 构建原始数据框并预处理
DF <- data.frame(ID=c(seq(1,10, by = 1)),
                 C1=c(9.1,0,9,9.2,9.1,0,0,9.3,9.1,9.0) ,
                 grp = c(1,2,2,3,4,5,5,5,6,7)
) %>% 
  group_by(grp) %>% 
  mutate(
    C1m = mean(C1),
    # 标记组是否可靠:组内无0值
    is_reliable = all(C1 != 0)
  ) %>% 
  ungroup() %>% 
  # 仅保留可靠组的C1m,不可靠组设为NA
  mutate(reliable_C1m = ifelse(is_reliable, C1m, NA)) %>% 
  # 向下填充NA,自动继承上一个可靠组的平均值
  fill(reliable_C1m, .direction = "down") %>% 
  # 重命名为目标变量C2
  rename(C2 = reliable_C1m) %>% 
  # 保留目标列
  select(ID, C1, grp, C1m, C2)

逻辑说明

  1. 分组计算每组平均值C1m,同时标记组是否可靠(用all(C1 != 0)判断组内无0值)
  2. 仅给可靠组赋值reliable_C1m,不可靠组设为NA
  3. 使用fill()向下填充NA,让不可靠组自动继承上一个可靠组的平均值
  4. 最后整理列顺序得到目标输出

运行后得到的结果完全符合你期望的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:55:07