首页 > 解决方案 > 以长格式创建随机组变量

问题描述

我在 R 中使用长格式数据集工作。我有变量(城市),每一行都是一个带有年龄、性别和更多信息的个体。我现在想创建一个 0 或 1 的变量,并且我希望 0 和 1 的分布接近 50/50 分布。

我的数据看起来与此类似。城市变量的长度不必相同长度。

   Sample    City    Age   Sex
   1        City_a   15     M
   2        City_a   27     F
   3        City_a   25     M
   4        City_b   20     M

我想得到类似的东西:

   Sample    City    Age   Sex   Random_g
   1        City_a   15     M      0 
   2        City_a   27     F      0
   3        City_a   25     M      1
   4        City_b   20     M      1

我开始执行以下操作,但由于我将大小设置为 1 而没有工作,而且我不知道还要设置什么。

library(tidyverse)
df %>% 
group_by(City) %>% 
mutate(Random_g =sample(c(0,1), replace=TRUE,size=1))

尝试以下哪个有效,但 0/1 的分布可以是任何东西:

df %>% 
rowwise() %>% 
mutate(Random_g =sample(c(0,1), replace=TRUE,size=1))

编辑:所以我注意到我写它的方式可能有点混乱。一些城市可以有 300 个样本(在这种情况下,我希望有 150 个 0 和 150 个 1),而一些有 1000 个。

Edit2:使用 Jimbou 示例解决了它:

  df%>%
  group_by(City) %>% 
  mutate(Rand_g=sample(c(0,1),length(Age), replace=TRUE, prob = c(0.5,0.5)))

标签: rrandom

解决方案


你可以试试

df%>%
  mutate(Rand_g=sample(0:1, n(), replace=TRUE, prob = c(0.5,0.5)))

group_by(City) %>%没有必要,因为 大数定律表明两组中的数字都收敛到 50%。或者这样......(我不是统计学家)


推荐阅读