Если вам нужно больше правдоподобных значений, чем просто среднее значение для каждого пропущенного значения, вы можете рассмотреть пакет mice
:
df_old <- data.frame(Sex = c(rep("M", 500), rep("F", 500)),
Age = round(c(rnorm(500, 35, 2), rnorm(500, 25, 2))))
df_NA <- data.frame(Sex = sample(c("M", "F"), 10, rep = T),
Age = NA)
df_old %>%
group_by(Sex) %>%
summarise(Mean = mean(Age))
Вот средства для обоих полов:
# A tibble: 2 x 2
Sex Mean
<fct> <dbl>
1 F 24.9
2 M 34.9
Теперь объединяем оба фрейма данных и вменяем значения, используя mice
:
df <- rbind(df_old, df_NA)
library(mice)
df_imp <- complete(mice(df, m=5, maxit=50, meth='pmm', seed=500), 1)
cbind(tail(df, n = 10), tail(df_imp, n = 10))
Мы использовали алгоритм прогнозирования среднего соответствия *1013* algortihm, чтобы рассчитать пропущенные значения.Есть несколько других доступных алгоритмов (?mice
).Последняя строка показывает вам вмененные значения:
Sex Age Sex Age
1001 M NA M 30
1002 F NA F 24
1003 M NA M 33
1004 M NA M 33
1005 F NA F 25
1006 M NA M 35
1007 M NA M 36
1008 M NA M 36
1009 M NA M 37
1010 F NA F 27