У меня есть вопрос об объединении наборов данных после многократного вменения. Я создал пример, чтобы объяснить мою проблему:
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. В наборе данных содержатся отсутствующие переменные, поэтому я использую несколько вменений для вменения этого набора данных (пакет 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
Однако, это дает мне сообщение об ошибке. Объединение прошло успешно, потому что законченный кадр данных - это то, что я хочу. Проблема в том, что я не могу преобразовать его обратно в объект среднего уровня.
Я знаю, что могу добавить переменные из dat2 одну за другой. Это работает:
completedat <- complete(impdat, include = T, action = 'long')
completedat$m1 <- dat2$m1
finaldat2 <- as.mids(completedat)
В этом примере это нормально, потому что dat2 имеет только 4 переменные. В моих реальных данных у меня есть приблизительно 200 переменных, которые я хочу добавить в свой множественный вмененный набор данных, поэтому я надеюсь, что есть более простой способ добавить все эти переменные в мой вмененный набор данных. Кто-нибудь может мне помочь?