首页 > 解决方案 > 随机化 R 中的两组数字,而不是在组之间重复值

问题描述

我有这个文件:

ID
1
1
1
3
3
3
7
7
7

我需要随机分配两组,(1,2,3)和(5,15,25)。

为此,我使用了这个:

set.seed(1109201)
df %>%
  group_by(ID) %>%
  dplyr::mutate(set1=sample(c(1,2,3), size=n(), replace=F),set2=sample(c(5,15,25), size=n(), replace=F))

我得到了这个:

ID  set1 set2
1   1   15
3   1   25
7   1   25
1   2   5
3   2   15
7   2   5
1   3   25
3   3   5
7   3   15

但我需要不同的set2inset1和值ID,如下所示:

  ID  set1 set2
    1   1   15
    3   1   25
    7   1   5
    1   2   5
    3   2   15
    7   2   25
    1   3   25
    3   3   5
    7   3   15

Set2不能重复IDset1 一些建议来控制这 2 套?

标签: rdplyrrandom-seed

解决方案


将您的dplyr代码更改为以下内容。使用“group_by()”步骤将使第二次采样仅在组内发生。

set.seed(1109201)
df %>%
  group_by(ID) %>%
  dplyr::mutate(set1=sample(c(1,2,3), size=n(), replace=F)) %>%
  group_by(set1) %>%
  mutate(set2=sample(c(5,15,25), size=n(), replace=F)) %>%
  ungroup()

# A tibble: 8 x 3
     ID  set1  set2
  <dbl> <dbl> <dbl>
1     1     2    15
2     1     3     5
3     1     1    25
4     3     3    15
5     3     2     5
6     3     1     5
7     7     2    25
8     7     3    25

推荐阅读