r - 将列添加到分组数据,将 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))
)
解决方案
您可以沿家庭组的序列长度进行采样并取模 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
推荐阅读
- python-3.x - python行用一个元素划分
- node.js - 如何从另一条路线调用一个模型
- sql - 将具有两个不同日期的数据分组并取最新日期
- javascript - nodejs 按文件类型计算文件大小
- rust - 仅匹配有效的 UTF-8 字符
- javascript - 如何检查 discord.js 中是否存在消息
- javascript - Angular 8 - 在单词出现时动态插入带有回调调用的按钮
- exception - 使用 Apache Camel 处理 onException() 异常
- android - 如何从 Rest API 获取动态数据
- centos7 - 参考:jfrog artifactory could not validate router error