合并数据框转换为as.mids对象时遇重复行名错误求助
问题:将SAS导出的多重插补数据转换为
mids对象时出现重复行名错误 背景
- 目标:将SAS完成多重插补后的数据转换为R中
mice包的as.mids对象 - 现有数据:
- 含缺失值的原始数据框(已添加
.imp=0标记) - 2次插补后的插补数据框(标记
.imp=1,2)
- 含缺失值的原始数据框(已添加
- 错误信息:执行
as.mids()转换时触发以下报错:
df_mids <- as.mids(df_full, .imp = ".imp", .id = "id") 错误于`.rowNamesDF<-`(x, value = value) : 不允许重复的‘row.names’ 另外:警告信息: 设置‘row.names’时存在非唯一值: ‘1’, ‘2’, ‘3’, ‘4’
原因分析
as.mids()要求.id参数对应的变量能唯一标识原始数据中的每一行,但当前用id作为标识时,同一id对应多个时间点(time变量)的行数据,无法生成唯一行名,导致报错。
解决步骤
1. 创建唯一行标识
结合id和time生成能唯一标记每一行的新变量:
library(mice) library(dplyr) # 为原始数据和插补数据创建唯一行ID df <- df %>% mutate(row_id = paste(id, time, sep = "_")) df_cc <- df_cc %>% mutate(row_id = paste(id, time, sep = "_"))
2. 堆叠数据并调整格式
无需将所有数值型变量强制转为因子(会破坏后续分析逻辑),仅调整.imp的因子顺序:
# 堆叠两个数据框 df_full <- bind_rows(df, df_cc) # 设置.imp的因子层级,确保原始数据(.imp=0)排在最前 df_full$.imp <- factor(df_full$.imp, levels = c(0, 1, 2)) # 按唯一行ID和插补编号排序 df_full <- df_full[order(df_full$row_id, df_full$.imp), ]
3. 转换为mids对象
调用as.mids()时,将.id参数指定为新创建的row_id:
df_mids <- as.mids(df_full, .imp = ".imp", .id = "row_id")
验证转换结果
查看生成的mids对象结构:
# 查看mids对象基本信息 summary(df_mids) # 检查插补数据的结构 str(df_mids)
内容的提问来源于stack exchange,提问作者Nuriaofzoiets
相关产品推荐
相关产品推荐

