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

求助:迭代填补/还原企业缺失ID值的R函数问题

企业ID缺失值迭代填补逻辑问题求助

我长期浏览论坛,首次发帖,若表述有疏漏敬请谅解。现遇到以下技术问题:

  • 手中有一份整合多来源的拼凑式面板数据集,包含18个不一致的企业ID变量,同一企业的观测中存在大量NA值,需还原缺失ID以尽可能完善数据。
  • 该数据集为面板数据,企业随时间会发生合并、迁移、变更法律状态等情况,部分ID变量编码会随观测时间变化,此类冲突案例需过滤,避免错误填补。
  • 我尝试编写迭代填补函数:提取变量名向量,循环遍历每个变量,按该变量分组后统计其他变量的唯一值数量,若其他变量唯一值均≤1则视为可填补组,用组内首个非NA值填补对应NA;否则视为冲突跳过。但当前代码循环逻辑有误,未能识别所有可填补数据。

示例数据

# 示例数据:ID 1可填补,ID 2不可填补
data <- data.frame(ID = c(1, 1, NA, 2, NA, 2, 2, 2),
ID_Variable_1 = c(10, 10, NA, 20, 20, 20, 19, 18),   
ID_Variable_2 = c(NA, 8, 8, 16, 16, 16, NA, NA),   
ID_Variable_3 = c(NA, 8, 8, NA, 10, NA, NA, NA),   
ID_Variable_4 = c("A10", NA, NA, NA, NA, "B12", "B12", "B12"))

当前尝试代码

# 当前尝试代码
### 提取变量名向量
column_vector <- names(data) 

### 定义填补函数
Impute_missing_data <- function(data, column_vector){   

#### 备份数据
temp_data <- data  

#### 遍历每个变量
for (i in column_vector) {

#### 识别无冲突的可填补组
imputation_candidates <- temp_data %>%       
group_by_at(vars(i)) %>%       
summarise(across(everything(), ~ n_distinct(., na.rm = TRUE))) %>%       
filter(if_all(-i, ~ . <= 1), .preserve = TRUE)

#### 获取可填补的ID值
imputation_applying <- imputation_candidates[[i]] 

#### 填补缺失值
temp_data <- temp_data %>%       
group_by_at(vars(i)) %>%       
mutate(across(everything(), ~ ifelse(.x %in% imputation_applying & is.na(.), first(.x[!is.na(.x)]), .x))) %>% ungroup()   
}   

#### 返回更新后的数据
return(temp_data) 
}

期望输出

# 期望输出
data_temp <- data.frame(ID = c(1, 1, 1, NA, 2, NA, 2, 2, 2),
ID_Variable_1 = c(10, 10, 10, 11, 20, 20, 20, 19, 18),   
ID_Variable_2 = c(8, 8, 8, 12, 16, 16, 16, NA, NA),   
ID_Variable_3 = c(8, 8, 8, NA, NA, 10, NA, NA, NA),   
ID_Variable_4 = c("A10", "A10", "A10", NA, NA, NA, "B12", "B12", "B12"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:05:54