我想创建一个虚拟变量,如果在两个或多个不同年龄组中观察到个体,则取值为1,否则为0.
有人能够做到这一点,并能解释给我吗?
一个小例子可能是:
set.seed(123)
df <- data.frame(id = sample(1:10, 30, replace = TRUE),
agegroup = sample(c("5054", "5559", "6065"), 30, replace = TRUE))
Run Code Online (Sandbox Code Playgroud)
并预期产量:
id agegroup dummy
3 6065 1
8 6065 1
5 6065 1
9 6065 1
10 5054 1
1 5559 0
6 6065 1
9 5054 1
6 5054 1
5 5054 1
10 5054 1
5 5559 1
7 5559 1
6 5559 1
2 5054 1
9 5054 1
3 5054 1
1 5559 0
4 5054 0
10 6065 1
9 5054 1
7 5559 1
7 6065 1
10 5054 1
7 5559 1
8 5054 1
6 5054 1
6 6065 1
3 6065 1
2 5559 1
Run Code Online (Sandbox Code Playgroud)
一个选项是使用dplyr::group_by(id)和计算unique年龄组.您的数据包含重复的行id和agegroup组合.
编辑:更新了评论来自@Henrik
library(dplyr)
df %>% group_by(id) %>%
mutate(dummy = as.integer(n_distinct(agegroup) > 1))
# # A tibble: 30 x 3
# # Groups: id [10]
# id agegroup dummy
# <int> <fctr> <int>
# 1 3 6065 1
# 2 8 6065 1
# 3 5 6065 1
# 4 9 6065 1
# 5 10 5054 1
# 6 1 5559 0
# 7 6 6065 1
# 8 9 5054 1
# 9 6 5054 1
# 10 5 5054 1
# # ... with 20 more rows
Run Code Online (Sandbox Code Playgroud)