我有以下数据框:
families <- data.frame(family=c('1', '1', '1', '2', '2', '3', '3'),
name=c('John', 'Anitta', 'Steven', 'Stella', 'Robert', 'Adam', 'William'),
role=c('Leader', 'Partner', 'Son', 'Leader', 'Son', 'Leader', 'Partner'))
print(families)
# A tibble: 7 × 3
# Groups: family [3]
family name role
<chr> <chr> <chr>
1 1 John Leader
2 1 Anitta Partner
3 1 Steven Son
4 2 Stella Leader
5 2 Robert Son
6 3 Adam Leader
7 3 William Partner
我想要创建一个名为“夫妇”的变量,如果检测到角色为“伴侣”的家庭成员存在,它将为同一家庭的所有成员分配 TRUE 或 FALSE 值。我希望它看起来像这样:
family name role couple
1 1 John Leader TRUE
2 1 Anitta Partner TRUE
3 1 Steven Son TRUE
4 2 Stella Leader FALSE
5 2 Robert Son FALSE
6 3 Adam Leader TRUE
7 3 William Partner TRUE
我尝试使用 group_by() 函数,然后使用 mutate() 和 case_when() 函数来实现此目的,但我得到了这个结果:
families <- families %>%
group_by(family)
families <- families %>%
mutate(
couple = case_when(
role == 'Partner' ~ TRUE,
TRUE ~ FALSE
)
)
print(families)
# A tibble: 7 × 4
# Groups: family [3]
family name role couple
<chr> <chr> <chr> <lgl>
1 1 John Leader FALSE
2 1 Anitta Partner TRUE
3 1 Steven Son FALSE
4 2 Stella Leader FALSE
5 2 Robert Son FALSE
6 3 Adam Leader FALSE
7 3 William Partner TRUE
使用
dplyr
包,你可以这样做:
library(dplyr)
families <- data.frame(family=c('1', '1', '1', '2', '2', '3', '3'),
name=c('John', 'Anitta', 'Steven', 'Stella', 'Robert', 'Adam', 'William'),
role=c('Leader', 'Partner', 'Son', 'Leader', 'Son', 'Leader', 'Partner'))
families
#> family name role
#> 1 1 John Leader
#> 2 1 Anitta Partner
#> 3 1 Steven Son
#> 4 2 Stella Leader
#> 5 2 Robert Son
#> 6 3 Adam Leader
#> 7 3 William Partner
families |>
group_by(family) |>
mutate(couple = any(role == "Partner"))
#> # A tibble: 7 × 4
#> # Groups: family [3]
#> family name role couple
#> <chr> <chr> <chr> <lgl>
#> 1 1 John Leader TRUE
#> 2 1 Anitta Partner TRUE
#> 3 1 Steven Son TRUE
#> 4 2 Stella Leader FALSE
#> 5 2 Robert Son FALSE
#> 6 3 Adam Leader TRUE
#> 7 3 William Partner TRUE
创建于 2024-04-25,使用 reprex v2.1.0