首页 > 解决方案 > 如何在 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

标签: rdplyr

解决方案


如果每行只有两行,则ID可以sample0 和 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

推荐阅读