在R中使用mice将DataFrame转为mids对象时遇错误求助
解决
as.mids转换时的"Original data not found"错误 错误的核心原因是:mice包的as.mids()函数要求长格式数据必须包含原始未插补的数据(标记为.imp=0的行),你的示例代码里只生成了1-10的插补数据集,缺少.imp=0的原始数据组,因此触发报错。
修正示例代码的步骤
要让转换成功,需要先把原始数据(即未插补的mtcars)作为.imp=0的组添加到长格式数据中,再执行转换:
library(mice) # 原始数据 df <- mtcars # 先添加.imp=0的原始数据组 new_df <- cbind(df, .imp = 0) # 循环生成1-10的插补组 for (x in 1:10){ # 生成当前插补组的标记 imp_tag <- rep(x, nrow(df)) # 绑定到数据(这里用mtcars模拟插补后的数据,实际场景替换为你的插补结果) df2 <- cbind(df, .imp = imp_tag) # 合并到总数据 new_df <- rbind(new_df, df2) } # 转换为mids对象 df_imp <- as.mids(new_df)
针对你的实际场景(从SPSS导入的CSV)
你从SPSS导出的CSV里,应该只包含了插补后的1-N组数据,缺少原始数据(.imp=0)。解决方法如下:
- 找到你最初用
mice插补前的原始数据集(或者从SPSS里确认是否有保留原始数据的行)。 - 给原始数据集添加
.imp=0的列,然后将其与SPSS导出的插补数据(确保它们的.imp列是1,2,...N)合并成一个长格式DataFrame。 - 再用
as.mids()转换即可。
示例代码(假设你已加载原始数据original_df和SPSS导入的插补数据spss_imp_df):
# 给原始数据添加.imp=0标记 original_df$.imp <- 0 # 合并原始数据和插补数据(注意spss_imp_df的.imp列应该是1到N的整数) combined_df <- rbind(original_df, spss_imp_df) # 转换为mids对象 final_mids <- as.mids(combined_df)
验证转换结果
转换完成后,可以用以下命令验证:
# 查看mids对象的基本信息 summary(final_mids) # 提取某一组插补数据 complete(final_mids, action = 1)
内容的提问来源于stack exchange,提问作者Nico Biagi
相关产品推荐
相关产品推荐

