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

R语言如何基于其他列数据填充数据框的缺失列值

基于已有非缺失行补全数据的实现方法

核心逻辑

从数据集中已经完成填充的行里,提取DESCRIPTION字段和GROUP、UCR字段的对应映射关系,再通过字段匹配把对应值回填到缺失行,避免手动枚举值出现的错漏,一次可以完成多列填充。
示例原始数据集结构如下:

OFFENSE   GROUP                  DESCRIPTION              UCR
0       3126      NaN                    ASSAULT                  NaN
1       3831      NaN                    PROPERTY DAMAGE          NaN
2       724       NaN                    AUTO THEFT               NaN
3       301       NaN                    ROBBERY                  NaN
4       619       NaN                    LARCENY ALL OTHERS       NaN
245865  3115      Aggravated Assault     ASSAULT                  Part One
245866  619       Larceny                LARCENY ALL OTHERS       Part One
245867  2629      Harassment             HARASSMENT               Part Two
245868  2629      Harassment             HARASSMENT               Part Two
245869  3208      Property Lost          PROPERTY - MISSING       Part Three

推荐实现(dplyr管道操作,适配现有代码风格)

library(dplyr)

# 1. 构建映射字典:从非缺失行提取每个DESCRIPTION对应的唯一GROUP、UCR值
match_dict <- df %>%
  filter(!is.na(GROUP), !is.na(UCR)) %>%
  distinct(DESCRIPTION, GROUP, UCR)

# 2. 左连接匹配回填缺失值
df_filled <- df %>%
  select(-GROUP, -UCR) %>% # 移除原表中带缺失值的待填充列
  left_join(match_dict, by = "DESCRIPTION")

如果只需要保留UCR为Part One的记录,匹配完成后直接筛选即可:

df_part_one <- df_filled %>% filter(UCR == "Part One")

原有代码的错误点

  • 列名不匹配:原数据中描述字段列名为DESCRIPTION,代码中写的offence_name在表中不存在
  • 判断语法错误:case_when中判断某个值是否属于值列表,需要用%in%操作符,不能直接用=(单等号为赋值操作,无法做包含判断)
  • 填充逻辑不全:仅通过列表判断只能填充UCR列,无法同步填充对应的GROUP列,效率低且容易出现两列值不匹配的问题
    如果要沿用列表判断的思路,修正后的代码如下:
# 提取Part One对应的DESCRIPTION列表
part1_desc_list <- unique(df$DESCRIPTION[df$UCR == "Part One"])

df <- df %>%
  mutate(
    UCR = case_when(
      DESCRIPTION %in% part1_desc_list ~ "Part One",
      TRUE ~ UCR # 不满足条件的行保留原有值
    )
  )

注意:该方法需要单独为GROUP列写匹配逻辑,不如映射表左连接的方式简便,更推荐第一种方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:15:41