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

合并数据框转换为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:00:01