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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:39:02