r - 合并估算和非估算数据
问题描述
我有一个关于在多重插补后合并数据集的问题。我创建了一个示例来解释我的问题:
id <- c(1,2,3,4,5,6,7,8,9,10)
age <- c(60,NA,90,55,60,61,77,67,88,90)
bmi <- c(30,NA,NA,23,24,NA,27,23,26,21)
time <- c(62,88,85,NA,68,62,89,62,70,99)
dat <- data.frame(id, age, bmi, time)
dat
id <- c(1,2,3,4,5,6,7,8,9,10)
m1 <- c(60,78,90,55,60,61,77,67,88,90)
m2 <- c(30,44,35,23,24,22,27,23,26,21)
m3 <- c(62,88,85,78,68,62,89,62,70,99)
dat2 <- data.frame(id, m1, m2, m3)
dat2
我有两个数据集,dat 和 dat2。数据集 dat 包含缺失的变量,所以我使用多重插补来插补这个数据集(包 MICE):
library(mice)
impdat <- mice(dat, maxit = 0)
methdat <- impdat$method
preddat <- impdat$predictorMatrix
preddat["id",] <- 0
preddat[,"id"] <- 0
impdat <- mice(dat, method = methdat, predictorMatrix = preddat, seed =
2018, maxit = 10, m = 5)
现在我想将估算的数据集 impdat 与数据集 dat2 合并。但那是我的问题出现了。我尝试了以下方法:
completedat <- complete(impdat, include = T, action = 'long')
finaldat <- merge(completedat, dat2, by = "id")
finaldat <- as.mids(finaldat)
Error in `[<-.data.frame`(`*tmp*`, j, value = c(61, 88)) : replacement has 2 rows, data has 1
但是,这给了我一条错误消息。合并成功,因为完成的数据框是我想要的。问题是我无法将它转换回 mids 对象。
我知道我可以一一添加来自 dat2 的变量。这确实有效:
completedat <- complete(impdat, include = T, action = 'long')
completedat$m1 <- dat2$m1
finaldat2 <- as.mids(completedat)
在这个例子中,这没关系,因为 dat2 只有 4 个变量。在我的真实数据中,我有大约 200 个变量要添加到我的多个估算数据集中,因此我希望有一种更简单的方法可以将所有这些变量添加到我的估算数据集中。有人可以帮助我吗?
解决方案
我遇到了同样的问题。就我而言,我的估算数据集和非估算数据集之间的观察数量不同。为了解决这个问题,在我合并数据后,我重新编码了变量.id
。调用和时mice
输出包。这与您的数据框变量不同,但它们应通过以下代码相互对应。 .id
mice
complete(..., action = 'long')
id
library(dplyr)
# recode .id based on value of id
mydata <- mutate(mydata, .id = as.numeric(as.factor(id)))
# this step is important according to the mice manual
mydata <- mydata[order(mydata$.imp, mydata$.id),]
as.mids
当我应用此重新编码时,该功能对我有用,我希望它也对你有用。
推荐阅读
- dapper - Dapper 错误:“System.InvalidOperationException:'ConnectionString 属性尚未初始化。'”
- python - Python WebScraping 混乱
- dart - Dart中的'is'和'=='有什么区别?
- swift - 在 Swift 中,如果 Thread.current.isMainThread == false,那么递归一次 DispatchQueue.main.sync 是否安全?
- matlab - 难以从 url 的数据 webread 中绘制图表
- python - 如何在不使用 __str__ 方法的情况下从类中返回对象?
- java - 基于偏好的分组不断返回空值
- c - 将 For 循环更改为 While 循环
- fiware-orion - 使用 Docker-compose 安装的 Cygnus-ngsi 不会在 MongoDB 中保存数据
- scala - 完成 scala 承诺竞赛