R语言如何按CASE关联规则用其他行值填充数据框NA缺失值
R语言数据框按CASE关联填充NA值解决方案
原有代码错误说明
- 判断NA不能使用
== NA,必须调用is.na()函数 - 数据框行列引用格式错误,正确格式为
数据框[行索引, 列名/列索引] - 循环条件的括号未配对
实现代码
方法1:基础R实现(无需额外安装依赖包)
# 遍历数据框每一行 for (i in 1:nrow(df)) { # 仅处理带有REF值、用来提供填充数据的行 if (!is.na(df$REF[i])) { # 定位待填充的目标行:CASE等于当前行REF值的行 target_idx <- which(df$CASE == df$REF[i]) # 填充PE列:仅当目标行PE为NA时才赋值 if (is.na(df$PE[target_idx]) && !is.na(df$PE[i])) { df$PE[target_idx] <- df$PE[i] } # 填充PE2列:仅当目标行PE2为NA时才赋值 if (is.na(df$PE2[target_idx]) && !is.na(df$PE2[i])) { df$PE2[target_idx] <- df$PE2[i] } } }
运行后执行print(df)即可得到你预期的输出结果。
方法2:dplyr实现(更简洁的结构化写法)
如果常用tidyverse生态工具,可以用分组填充的逻辑实现:
library(dplyr) df <- df %>% # 生成临时分组字段:把需要关联的行划分到同一组 group_by(group_id = ifelse(!is.na(SERIAL), CASE, REF)) %>% # 组内用非NA值填充对应列的缺失值 mutate( PE = max(PE, na.rm = TRUE), PE2 = max(PE2, na.rm = TRUE) ) %>% # 移除临时字段,恢复原表结构 ungroup() %>% select(-group_id)
内容的提问来源于stack exchange,提问作者E_H
相关产品推荐
相关产品推荐

