我正在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)))
答案 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%。大概...(我不是统计学家)