首页 > 解决方案 > 在 R 中,如何使用 tidyverse 中的某些东西将虚拟变量值传播给组中的每个人(即家庭)?

问题描述

我有按家庭分组的个人数据。我正在尝试创建一个家庭级别的虚拟变量,指示有孩子的家庭。我根据观察的年龄创建了一个个人级别的 Child 变量。如果它是 1,我想将这个值“传播”给家庭的所有成员。

数据如下所示:

HHID Child
1    0
1    1
1    0
2    0
2    1
3    0
3    0
3    0

我想要这样的数据框:

HHID Child HH_child
1    0     1
1    1     1
1    0     1
2    0     1
2    1     1
3    0     0
3    0     0
3    0     0

我认为可以使用 sqldf 来完成,但我想在 Tidyverse 中完成。谢谢!

标签: r

解决方案


这是一个tidyverse/dplyr解决方案:

library(dplyr)

df %>% 
  group_by(HHID) %>% 
  mutate(HH_child = if_else(any(Child == 1),1,0))

这给了我们:

# A tibble: 8 x 3
   HHID Child HH_child
  <int> <int>    <dbl>
1     1     0        1
2     1     1        1
3     1     0        1
4     2     0        1
5     2     1        1
6     3     0        0
7     3     0        0
8     3     0        0

数据:

structure(list(HHID = c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L), Child = c(0L, 
1L, 0L, 0L, 1L, 0L, 0L, 0L)), row.names = c(NA, -8L), .internal.selfref = <pointer: 0x0b952498>, class = c("tbl_df", 
"tbl", "data.frame"))

推荐阅读