R:如果列包含重复的给定组,则创建虚拟

maa*_*aas 6 r dataframe

我想创建一个虚拟变量,如果在两个或多个不同年龄组中观察到个体,则取值为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)

MKR*_*MKR 5

一个选项是使用dplyr::group_by(id)和计算unique年龄组.您的数据包含重复的行idagegroup组合.

编辑:更新了评论来自@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)