所以我有一个数据集,我希望以某种方式(5组)的概率将其分层分为Active / Control组。
在第一步中,我每组抽取100个随机样本:
library(plyr)
sample <- ddply(DF,.(prob_group),function(x) x[sample(nrow(x),100),])
table(sample$prob_group)
Output:
0-2 02-04 04-06 06-08 08-
100 100 100 100 100
之后,在第二步中,我将样本分成两组,大小相等:
library(dplyr)
set.seed(1)
out2 <- sample %>%
group_by('X1', 'X2', 'X3', 'X4', 'X5',
'X6', 'X7', 'X8','X9', 'prob_group') %>%
sample_n(250)
active <- out2
control <- subset(sample, !(sample$client_id %in% active$client_id))
但是现在我每组都没有50人。
我理解为什么,但我想知道是否有办法告诉R我想保持相同的尺寸。
table(active$prob_group)
0-2 02-04 04-06 06-08 08-
45 51 56 49 49
table(control$prob_group)
0-2 02-04 04-06 06-08 08-
55 49 44 51 51
答案 0 :(得分:1)
你接近解决方案:
library(dplyr)
group_n <- 5
group_size <- 100
df <- data.frame(group=sample(rep(1:group_n,group_size)))
table(df$group)
active <- df %>% group_by(group) %>% sample_n(group_size/2)
table(active$group)