r - 数据集中每组的样本数不同

标签 r dplyr plyr tidyr

给定一个数据集

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/

相关文章:

r - 如何使用 R 将字符从 Markdown 转换为 LaTeX

Axis 在中心的 R 图

r - 使用 dplyr 和 stringr 检测多个字符串

r - 使用 apply 或 plyr 独立地打乱矩阵的列

R:为 dplyr 选择每两个连续行

r - 可以通过[.data.table()中的浏览器查看.SD吗?

R:如何更改列表对象的字符编码

r - 使用重叠阈值逐行选择跨列的组合

r - 如何创建列值为 TRUE 的列名列表列

r - dplyr总结: Equivalent of ".drop=FALSE" to keep groups with zero length in output