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

如何基于查找表在R中高效实现缺失值的众数插补?

基于众数查找表高效插补缺失值的方法

问题背景

主数据集:

Id   Date         Col1    Col2    Col3
 1211 01/14/2009   1       2       1  
 1211 03/19/2001   NA      0       2
 1019 02/21/1999   2       1       NA
 2023 03/09/2002   1       NA      0
 1245 05/14/2022   0       1       NA

众数查找表:

Col1     Col2     Col3
   0        1        0

需要用查找表中的众数对应插补主数据集中的NA,得到目标数据集:

Id   Date         Col1    Col2    Col3
 1211 01/14/2009   1       2       1  
 1211 03/19/2001   0       0       2
 1019 02/21/1999   2       1       0
 2023 03/09/2002   1       1       0
 1245 05/14/2022   0       1       0

以下是两种主流工具的高效实现方式:


R语言实现(dplyr)

将查找表转换为命名向量,再用across批量处理各列缺失值:

library(dplyr)

# 构造主数据集
main_df <- tibble(
  Id = c(1211, 1211, 1019, 2023, 1245),
  Date = c("01/14/2009", "03/19/2001", "02/21/1999", "03/09/2002", "05/14/2022"),
  Col1 = c(1, NA, 2, 1, 0),
  Col2 = c(2, 0, 1, NA, 1),
  Col3 = c(1, 2, NA, 0, NA)
)

# 构造众数查找表
mode_lookup <- tibble(Col1 = 0, Col2 = 1, Col3 = 0)
# 转换为命名向量
mode_vec <- pull(mode_lookup, 1) %>% set_names(names(mode_lookup))

# 批量插补缺失值
filled_df <- main_df %>%
  mutate(across(all_of(names(mode_vec)), ~ifelse(is.na(.), mode_vec[cur_column()], .)))

print(filled_df)

Python(Pandas)实现

将查找表转换为字典,直接传入fillna完成批量插补:

import pandas as pd

# 构造主数据集
main_df = pd.DataFrame({
    "Id": [1211, 1211, 1019, 2023, 1245],
    "Date": ["01/14/2009", "03/19/2001", "02/21/1999", "03/09/2002", "05/14/2022"],
    "Col1": [1, None, 2, 1, 0],
    "Col2": [2, 0, 1, None, 1],
    "Col3": [1, 2, None, 0, None]
})

# 构造众数查找表
mode_lookup = pd.DataFrame({"Col1": [0], "Col2": [1], "Col3": [0]})
# 转换为字典(键为列名,值为对应众数)
mode_dict = mode_lookup.iloc[0].to_dict()

# 批量插补缺失值
filled_df = main_df.fillna(mode_dict)

print(filled_df)

内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:33:21