R语言 在组内随机分配变量的值

szqfcxe2  于 2023-05-26  发布在  其他
关注(0)|答案(3)|浏览(159)

我想为id_group中的每个id_individual随机分配(在R中)值0或1。每个组由两个人组成,random_var应该遵守以下条件(在组内):sum(random_var)==1。
更准确地说,我希望我的随机变量是这样的:
| ID_组|ID_个体|随机变量|
| - -----|- -----|- -----|
| 一个|一个|一个|
| 一个|2| 0|
| 2|一个|0|
| 2| 2|一个|
你知道如何在R中编写这个请求吗?
谢谢!
克洛伊

mbyulnm0

mbyulnm01#

您可以在ave中尝试sample

> transform(df, Random_var = +(ave(ID_INDIVIDUAL, ID_GROUP, FUN = sample) == 1))
  ID_GROUP ID_INDIVIDUAL Random_var
1        1             1          0
2        1             2          1
3        2             1          1
4        2             2          0
kqhtkvqz

kqhtkvqz2#

dplyr选项使用group_by,如下所示:

library(dplyr)
df %>%
  group_by(ID_GROUP) %>%
  mutate(Random_var = sample(0:1))
#> # A tibble: 4 × 3
#> # Groups:   ID_GROUP [2]
#>   ID_GROUP ID_INDIVIDUAL Random_var
#>      <int>         <int>      <int>
#> 1        1             1          0
#> 2        1             2          1
#> 3        2             1          1
#> 4        2             2          0

创建于2023-05-26带有reprex v2.0.2

btqmn9zl

btqmn9zl3#

下面是一个自定义函数的解决方案:

my_binary <- function(n) {
  vec <- rep(0, n)
  if(n == 1) {
    vec <- sample(c(0, 1), 1)
  } else {
    vec[sample(n, 1)] <- 1
  }
  return(vec)
}


library(dplyr)

df %>%
  group_by(ID_GROUP) %>%
  mutate(Random_var = my_binary(n()))

ID_GROUP ID_INDIVIDUAL Random_var
     <dbl>         <dbl>      <dbl>
1        1             1          0
2        1             2          1
3        2             1          0
4        2             2          1

数据:

df <- data.frame(
  ID_GROUP = c(1, 1, 2, 2),
  ID_INDIVIDUAL = c(1, 2, 1, 2)
)

相关问题