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

如何在R中按受访者组双向填充lost_income的缺失值?

基于基准行双向连续填充NA的R实现

示例输入数据

先构造符合需求的示例数据集:

library(tibble)
df <- tibble(
  respondent_id = c(1,1,1,1,1,2,2,2,2),
  time = c(1,2,3,4,5,1,2,3,4),
  change = c(0, -1, NA, NA, NA, -1, NA, NA, 0),
  lost_income = c(NA, NA, 0, NA, NA, NA, 0, NA, NA)
)

期望输出

# # A tibble: 9 × 4
#   respondent_id  time change lost_income
#           <dbl> <dbl>  <dbl>       <dbl>
# 1             1     1      0          -2
# 2             1     2     -1          -1
# 3             1     3     NA           0
# 4             1     4     NA           1
# 5             1     5     NA           2
# 6             2     1     -1          -1
# 7             2     2     NA           0
# 8             2     3     NA           1
# 9             2     4      0           2

实现代码

使用dplyr分组后,通过基准行位置计算相对偏移量完成填充:

library(dplyr)

df_filled <- df %>%
  group_by(respondent_id) %>%
  mutate(
    # 定位当前分组中lost_income=0的基准行位置
    base_pos = which(lost_income == 0),
    # 计算每行相对基准行的偏移量,替换NA
    lost_income = row_number() - base_pos
  ) %>%
  ungroup()

代码逻辑说明

  1. 按respondent_id分组,保证每个受访者的填充逻辑独立执行
  2. 通过which(lost_income == 0)获取分组内基准行的行号
  3. 用当前行的row_number()减去基准行号,得到双向连续的偏移值:基准行结果为0,向前依次递减为-1、-2…,向后依次递增为1、2…
  4. 取消分组后得到最终填充完成的数据集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:47:21