簡體   English   中英

隨機重新分配具有條件的組成員身份

[英]randomly reassign group membership with condition

我有下表:

姓名 團體
一個 1
b 1
c 2
d 2
e 3
F 3

並且我想通過(i)確保名稱不會分配給同一組,以及(ii)組成員身份的概率保持不變,來隨機重新分配組成員身份。 此外,我試圖 (iii) 避免將同一組下的所有名稱分配給同一個新組。 本質上,我想實現這樣的目標:

姓名 團體 新組
一個 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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM