首页 > 解决方案 > 将列添加到分组数据,将 1 分配给个人,并将 1 或 0 随机分配给对

问题描述

我有一个数据框...

df <- tibble(
  id = 1:7, 
  family = c("a","a","b","b","c", "d", "e")
  )

家庭最多只能包含 2 个成员(因此他们是个人或成对)。

我需要一个新列“随机”,将数字 1 分配给只有一个成员(例如 c、d 和 e)的家庭,并将 0 或 1 随机分配给包含 2 个成员的家庭(示例中的 a 和 b)。

到最后,数据应如下所示(取决于 0/1 的随机分配)...

df <- tibble(
  id = 1:7, 
  family = c("a","a","b","b","c", "d", "e"),
  random = c(1, 0, 0, 1, 1, 1, 1)
  )

我希望能够通过 group_by 和 mutate 的组合来做到这一点,因为我主要使用 Tidyverse。

我尝试了以下(但这并没有在家庭中随机分配 0/1)......

df %>%
group_by(family) %>%
  mutate(
   random = if_else(
     condition = n() == 1,
     true = 1,
     false = as.double(sample(0:1,1,replace = T))
   )

标签: rtidyversedata-wrangling

解决方案


您可以沿家庭组的序列长度进行采样并取模 2 的答案:

df %>% 
  group_by(family) %>% 
  mutate(random = sample(seq(n())) %% 2)
#> # A tibble: 7 x 3
#> # Groups:   family [5]
#>      id family random
#>   <int> <chr>   <dbl>
#> 1     1 a           0
#> 2     2 a           1
#> 3     3 b           0
#> 4     4 b           1
#> 5     5 c           1
#> 6     6 d           1
#> 7     7 e           1



推荐阅读