如何在R中使用dplyr基于前一行及变量填充列Y?
基于dplyr填充Y列缺失值的解决方案
给定如下数据框:
| Index | A | B | Y |
|---|---|---|---|
| 1 | 2 | 1 | 1 |
| 2 | 2 | 1 | NA |
| 3 | 2 | 1 | NA |
| 4 | 2 | 1 | NA |
需要按照公式 Y = 前一行Y值 + A - B 填充Y列的NA值,以下是基于dplyr的实现方案:
步骤1:加载必要的包并构造示例数据
library(dplyr) library(purrr) # 配合使用accumulate函数处理累积计算 # 构造示例数据框 df <- tibble( Index = 1:4, A = rep(2, 4), B = rep(1, 4), Y = c(1, NA, NA, NA) )
步骤2:计算并填充Y列
df_filled <- df %>% mutate( Y = accumulate(seq_along(Y), .init = Y[1], function(prev_y, i) { # 当前行Y非NA则保留原值,否则用前一行Y值 + 当前行A-B计算 if (!is.na(Y[i])) Y[i] else prev_y + A[i] - B[i] }) %>% tail(-1) # 移除accumulate返回的初始值,匹配原数据行数 )
最终结果
运行代码后,df_filled的输出与预期一致:
| Index | A | B | Y |
|---|---|---|---|
| 1 | 2 | 1 | 1 |
| 2 | 2 | 1 | 2 |
| 3 | 2 | 1 | 3 |
| 4 | 2 | 1 | 4 |
如果数据需要按某列分组填充,只需在mutate前添加group_by(分组列)即可。
内容的提问来源于stack exchange,提问作者Cero
相关产品推荐
相关产品推荐

