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

按ID分组填充缺失值但不跨组传递的R语言dplyr实现问题

按ID分组填充缺失值(不跨组传递数值)

原始数据

ID日期Compensation(薪酬)
004Jan1NA
004Jan255
004Jan6NA
010Dec12NA
010Dec14NA
010Dec1566
010Dec16NA
012Feb533
012Feb9NA
012Feb10NA
012May289

需求:按ID分组填充Compensation列的缺失值,禁止将前一个ID组的数值传递到下一个组。若某组开头无有效Compensation值,保留NA,不使用上一组数值填充。

当前使用的错误代码

DataWanted <- Data
dplyr::group_by("ID", "Date") %>% 
fill("Compensation", .direction = "down")

当前结果与期望结果对比

ID日期当前得到的Compensation列期望的Compensation列
004Jan1NANA
004Jan25555
004Jan65555
010Dec 1255NA
010Dec1455NA
010Dec156666
010Dec166666
012Feb53333
012Feb93333
012Feb103333
012May28989

解决方案

你的代码问题在于group_by的用法错误:用字符串作为分组变量会导致分组失效,实际没有按ID分组,因此填充操作跨了ID组。正确做法是直接传入变量名(无需引号),且仅按ID分组。

修改后的代码:

library(dplyr)
library(tidyr)

DataWanted <- Data %>%
  group_by(ID) %>%
  fill(Compensation, .direction = "down") %>%
  ungroup()

代码说明

  • group_by(ID):正确按ID列分组,确保填充仅在每个ID组内执行,不会跨组传递数值。
  • fill(Compensation, .direction = "down"):在组内向下填充缺失值,组开头的NA会保留,不会被上一组数值覆盖。
  • ungroup():可选操作,取消分组避免后续操作受分组状态影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:24:52