随机重新分配有条件的组成员
randomly reassign group membership with condition
我有以下 table:
name
group
a
1
b
1
c
2
d
2
e
3
f
3
并且我想通过 (i) 确保名称 不会 被分配到同一组,以及 (ii) 的概率组成员将保持不变。此外,我试图 (iii) 避免将同一组下的所有名称分配给同一新组。本质上我想实现这样的目标:
name
group
new.group
a
1
2
b
1
3
c
2
1
d
2
3
e
3
1
f
3
2
如何在 R
中执行此操作?
有了所有限制,这几乎不再是洗牌了:您可以使用模运算符。
df %>%
group_by(group) %>%
mutate(new_group = (2 + row_number() + group) %% 3 + 1)
name group new_group
<chr> <int> <dbl>
1 a 1 2
2 b 1 3
3 c 2 3
4 d 2 1
5 e 3 1
6 f 3 2
使用 sample
+ setdiff
的基础 R 选项
transform(
df,
new.group = ave(group, group, FUN = function(x) sample(setdiff(group, x),length(x)))
)
给予
name group new.group
1 a 1 2
2 b 1 3
3 c 2 1
4 d 2 3
5 e 3 1
6 f 3 2
数据
> dput(df)
structure(list(name = c("a", "b", "c", "d", "e", "f"), group = c(1L,
1L, 2L, 2L, 3L, 3L)), class = "data.frame", row.names = c(NA,
-6L))
我有以下 table:
name | group |
---|---|
a | 1 |
b | 1 |
c | 2 |
d | 2 |
e | 3 |
f | 3 |
并且我想通过 (i) 确保名称 不会 被分配到同一组,以及 (ii) 的概率组成员将保持不变。此外,我试图 (iii) 避免将同一组下的所有名称分配给同一新组。本质上我想实现这样的目标:
name | group | new.group |
---|---|---|
a | 1 | 2 |
b | 1 | 3 |
c | 2 | 1 |
d | 2 | 3 |
e | 3 | 1 |
f | 3 | 2 |
如何在 R
中执行此操作?
有了所有限制,这几乎不再是洗牌了:您可以使用模运算符。
df %>%
group_by(group) %>%
mutate(new_group = (2 + row_number() + group) %% 3 + 1)
name group new_group
<chr> <int> <dbl>
1 a 1 2
2 b 1 3
3 c 2 3
4 d 2 1
5 e 3 1
6 f 3 2
使用 sample
+ setdiff
transform(
df,
new.group = ave(group, group, FUN = function(x) sample(setdiff(group, x),length(x)))
)
给予
name group new.group
1 a 1 2
2 b 1 3
3 c 2 1
4 d 2 3
5 e 3 1
6 f 3 2
数据
> dput(df)
structure(list(name = c("a", "b", "c", "d", "e", "f"), group = c(1L,
1L, 2L, 2L, 3L, 3L)), class = "data.frame", row.names = c(NA,
-6L))