【发布时间】:2021-07-17 18:34:13
【问题描述】:
我有一个问题,我需要在标记这些插补值时对缺失值进行一些棘手的条件插补,但我不知道如何处理它。
我的数据是整齐(长)格式。我想要做的是生成一个完整的数据集,其中每个“状态”都有一组完整的行,其中包含“男性”、“女性”和“总”的“出生”值。如果某个州缺少“Total”,则从该“州”的“Male”+“Female”估算。如果我们有“Total”,但没有“Male”或“Female”,则缺失的“Births”值是根据“Total”-“Male”(或“Female”,取决于缺失的内容)计算得出的。
但是,只有当“源”对于该州的所有当前行都相同时,才能估算缺失值。 我们不能基于组合来自不同来源的数据进行估算。最后,所有估算的行都应该有它们的父状态和来源,并且应该有一个用于二进制“聚合”列的“1”标志。
reprex 在下面,期望的结果示例在下面,并有一个快速解释。如果可能的话,我想用 Tidyverse 来做这件事,但我愿意接受更好的解决方案。提前谢谢你!
sex <- c("Male", "Female", "Total", "Male", "Female", "Male", "Female", "Male", "Total")
state <- c("New Jersey", "New Jersey", "New Jersey", "Vermont", "Vermont", "Washington", "Washington", "Montana", "Montana")
source <- c("WHO", "WHO", "WHO", "CDC", "CDC", "UN", "CDC", "UN", "UN")
aggregated <- c(0, 0, 0, 0, 0, 0, 0, 0, 0)
births <- c(20, 30, 50, 15, 16, 20, 27, 15, 33)
df <- data.frame(sex, state, source, aggregated, births)
df
sex state source aggregated births
1 Male New Jersey WHO 0 20
2 Female New Jersey WHO 0 30
3 Total New Jersey WHO 0 50
4 Male Vermont CDC 0 15
5 Female Vermont CDC 0 16
6 Male Washington UN 0 20
7 Female Washington CDC 0 27
8 Male Montana UN 0 15
9 Total Montana UN 0 33
生成集说明
新泽西:从一开始就完成,没有变化
佛蒙特州:缺少总计,所有来源相同 (CDC),新行创建的总计是根据男性 + 女性推算的出生人数
华盛顿:缺少总计,但男性和女性的来源不同,因此无法估算
蒙大拿州:缺少女性,所有来源都相同 (UN),新的女性行是根据总出生数 - 男性创建的。
sex state source aggregated births
1 Male New Jersey WHO 0 20
2 Female New Jersey WHO 0 30
3 Total New Jersey WHO 0 50
4 Male Vermont CDC 0 15
5 Female Vermont CDC 0 16
6 Total Vermont CDC 1 31
7 Male Washington UN 0 20
8 Female Washington CDC 0 27
9 Male Montana UN 0 15
10 Female Montana UN 1 18
11 Total Montana UN 0 33
【问题讨论】:
标签: r tidyverse aggregation imputation