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

如何按组按特定规则用序列填充数据中的NA值?

按组填充NA值的解决方案

输入数据

ID  Count
1   0
1   1
1   NA 
1   2
1   NA 
1   NA 
1   NA 
1   NA 
1   NA 
2   0
2   NA
2   NA
2   3

需求说明

每个ID的首行值为0,按ID分组填充Count列的NA值:

  • 若NA前后均有有效值,填充为从NA前的数值到NA后首个数值的递增序列
  • 若NA后无有效值,从NA前的最后一个有效值开始依次递增填充

R语言实现(基于dplyr)

library(dplyr)

# 构造输入数据集
df <- tibble(
  ID = c(1,1,1,1,1,1,1,1,1,2,2,2,2),
  Count = c(0,1,NA,2,NA,NA,NA,NA,NA,0,NA,NA,3)
)

# 分组处理填充逻辑
df_filled <- df %>%
  group_by(ID) %>%
  mutate(
    # 将连续NA与前后有效值划分为不同分段
    segment = cumsum(!is.na(Count)),
    # 获取每个NA对应的前、后有效值
    prev_val = ifelse(is.na(Count), lag(Count, na.rm = TRUE), Count),
    next_val = ifelse(is.na(Count), lead(Count, na.rm = TRUE), Count),
    # 生成填充序列
    Count = case_when(
      # 保留原始非NA值
      !is.na(Count) ~ Count,
      # 前后都有值:生成从prev到next的等长递增序列
      !is.na(next_val) ~ seq(prev_val, next_val, length.out = n()),
      # 后面无值:从最后一个有效值开始依次递增
      TRUE ~ prev_val + row_number() - max(which(!is.na(Count)))
    )
  ) %>%
  # 清理辅助列
  select(-segment, -prev_val, -next_val) %>%
  ungroup()

# 输出结果
print(df_filled)

输出结果

# A tibble: 13 × 2
      ID Count
   <dbl> <dbl>
 1     1     0
 2     1     1
 3     1     1
 4     1     2
 5     1     3
 6     1     4
 7     1     5
 8     1     6
 9     1     7
10     2     0
11     2     1
12     2     2
13     2     3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:10:49