给定一个数据集
key <- rep(c('a', 'b', 'c'), 10)
value <- sample(30)
df <- data.frame(key, value)
我想要键中每个组的样本数量不同,使用 dplyr 的简单代码显然不适用于此任务
ns <- c('a'= 1, 'b'= 2, 'c' = 3)
df %>%
mutate(n_s = ns[key]) %>%
group_by(key) %>%
sample_n(n_s)
有一些解决方案看起来就这么简单吗?
最佳答案
您可以使用 mapply
并使用 split(df, df$key)
和 ns
作为参数,但请注意 ns
不使用。重要的是组的顺序,如果组的数量与 ns 的长度不匹配,则 ns 将被回收。
set.seed(129)
mapply(sample_n, split(df, df$key), ns, SIMPLIFY = FALSE) %>%
rbind_all
# key value
# (fctr) (int)
#1 a 29
#2 b 14
#3 b 22
#4 c 10
#5 c 24
#6 c 3
关于r - 数据集中每组的样本数不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36072851/