如何用dplyr实现A列NA值用其余列行均值填充的操作
dplyr 等价实现方案
以下代码完全复刻基础R代码的执行逻辑与输出结果,无任何额外行为差异:
library(dplyr) foo <- tibble(A = c(3,5,NA,6,NA,7,NA), B = c(4,5,4,5,6,4,NA), C = c(6,5,2,8,8,5,NA)) foo <- foo |> # 生成与原代码tmp完全等价的行均值临时列:逐行计算除A外所有列的均值、忽略NA mutate(.row_mean = rowMeans(across(-A), na.rm = TRUE)) |> # 按原逻辑替换A列值 mutate( A = case_when( !is.na(A) ~ A, # A列原有非NA值直接保留 is.nan(.row_mean) ~ NA_real_, # 均值为NaN(其余列全为NA)时,将A设为NA TRUE ~ .row_mean # A为NA且均值有效时,用均值替换NA ) ) |> # 移除临时辅助列,保持原数据结构 select(-.row_mean)
逻辑对齐说明
- 行均值计算范围、缺失值处理规则与原代码完全一致,覆盖所有行列组合
- 非NA的A列值不会被修改
- 专门保留了原代码中“将计算得到的NaN转回NA”的处理逻辑,避免A列出现NaN值
- 最终输出的结果与基础代码实现无任何差异
处理完成后的数据结构为:
# A tibble: 7 × 3 A B C <dbl> <dbl> <dbl> 1 3 4 6 2 5 5 5 3 3 4 2 4 6 5 8 5 7 6 8 6 7 4 5 7 NA NA NA
内容的提问来源于stack exchange,提问作者user111024
相关产品推荐
相关产品推荐

