我想计算小鼠中估算数据集的个体水平平均值(用于展示目的,不用于分析)。例如,如果我有以下缺少的数据集。
身份证 | V1 | V2 | V3 |
---|---|---|---|
1 | 10 | NA | 9 |
2 | 12 | 8 | NA |
3 | NA | 7 | 11 |
还有 2 个像这样的估算数据集(用 * 标记的估算值)
身份证 | V1 | V2 | V3 |
---|---|---|---|
1 | 10 | 10* | 9 |
2 | 12 | 8 | 12* |
3 | 11* | 7 | 11 |
身份证 | V1 | V2 | V3 |
---|---|---|---|
1 | 10 | 9* | 9 |
2 | 12 | 8 | 10* |
3 | 14* | 7 | 11 |
我希望生成的数据集看起来像这样,其中 * 数字是估算缺失数据的平均值。
身份证 | V1 | V2 | V3 |
---|---|---|---|
1 | 10 | 9.5* | 9 |
2 | 12 | 8 | 11* |
3 | 12.5* | 7 | 11 |
我不知道如何在 R 中有效地做到这一点
可以直接替换NA值:
df[is.na(df)] <- ((impute_df1 + imput_df2)/2)[is.na(df)]
我暴力破解它。
averages <- complete(imp, 1)
for(m in 2:imp$m){
averages <- averages + complete(imp, m)
}
averages <- averages / imp$m
鉴于所有变量都是连续的,考虑使用
Reduce
:
lapply(1:imp$m, function(x) complete(imp, x)) %>% {Reduce(`+`, .) /length(.)}