r - 如何在 R 中为 dplyr 中的配对行分配条件
问题描述
我有一长串人与人之间的配对互动。我需要为每一对随机分配一个启动器。因此,对于每一对,都会有一个人被分配一个1
,另一个人将被分配一个0
。
我试图找到答案,因为我相信它一定已经在某个地方解决了。不幸的是,我认为我没有找到正确的关键字。以下答案是最有用的:
这是一些虚拟代码,我在哪里(真实数据有更多的列和行):
dummy_data <- tibble(
ID = c(1, 1, 2, 2, 3, 3),
Sex = c("M", "F", "F", "M", "F", "M")
)
dummy_data <- dummy_data %>%
group_by(ID) %>%
mutate(initiator = ifelse(row_number() == 1,
sample(0:1, 1),
(1 - row_number()[1])
)
)
这里的想法是,我将为每对中的第一个人分配一个随机值,然后为第二个人取相反的值。
我遇到的问题在于ifelse()
函数的“错误”部分——我似乎无法得到前一行的值。
0
所需的输出是一个仅由s 和s组成的新列1
,其中每对只有一个0
和一个1
。
解决方案
如果每行只有两行,则ID
可以sample
0 和 1 并随机分配它们。
library(dplyr)
dummy_data %>%
group_by(ID) %>%
mutate(initiator = sample(0:1))
# ID Sex initiator
# <dbl> <chr> <dbl>
#1 1 M 0
#2 1 F 1
#3 2 F 1
#4 2 M 0
#5 3 F 1
#6 3 M 0
推荐阅读
- python - 如何注释函数参数的最大限制
- android - Android Studio:HTML5 Webapp to APK using webview,错误你的浏览器不允许读取本地文件
- python - Pandas read_csv 在第一列失败
- android - 当我调用不在手机中的应用程序时,Interactive Canvas 终止
- haskell - Haskell Rank1Types 和括号——奇怪的行为
- mysql - 在 MYSQL 中插入文本值时出现错误
- c++ - 在 C++ 中删除有序链表中的节点
- java - 如何使用 mockito 测试我们从数据库中以更新形式获取的对象
- javascript - Angular:如何订阅服务中不断变化的数据变量作为 Angular 材料表的数据源
- ios - 表格视图单元格中的标签未显示