创建长格式的随机组变量

时间:2018-07-19 09:18:27

标签: r random

我正在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)))

2 个答案:

答案 0 :(得分:0)

我的评论更加笼统:

mtcars %>% 
  group_by(cyl) %>% 
  mutate(randomgroup = ifelse(sample(1:n(), n()) <= n() / 2, 1, 0))

这给您每个缸1和0的数量相等,并且如果缸中行数不均,它会额外增加1。

答案 1 :(得分:0)

您可以尝试

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

group_by(City) %>%不是必需的,因为law of large numbers表示两组中的数字都收敛到50%。大概...(我不是统计学家)