如何在 R 中 "group a tbl"

How to "group a tbl" in R

我正在尝试按因子级别获取数据框中的 bootstrap 行样本。为此,我使用 ddplysample_n。但是,我需要为 sample_n 设置一个 size 参数,因为这 returns 一条错误消息:

ddply (mtcars, .(carb), .fun = sample_n, replace=TRUE)

?sample 中,我读到 size 论点 如果 tbl 是 grouped,大小适用于每个组 .我想这就是我要找的东西,但我找不到关于如何对 tbl 参数进行分组的任何其他信息。 ddply 函数中还没有分组吗?

请注意,我不想 运行 上面的函数用于固定行数 (ej: ddply (mtcars, .(carb), .fun = sample_n, size = 2, replace=TRUE)),因为它可能会根据因素的水平而变化。在在这个例子中,我希望 carb=2 水平有 10 个样本,carb=3 水平有 3 个样本,等等...

我们可以使用 dplyrpurrr。在下面的代码中,我们使用 split(.$carb) 将数据帧拆分为 carbmap2_df 可以通过列表中的每个元素(.x,这里是拆分数据框的列表)和向量或列表(.y)应用函数,然后return 组合数据框。 .y = c(3, 3, 1, 3, 1, 1) 指定每组的采样数。

set.seed(123)

library(dplyr)
library(purrr)

mtcars %>%
  split(.$carb) %>%
  map2_df(.y = c(3, 3, 1, 3, 1, 1), ~.x %>% sample_n(size = .y, replace = TRUE))

    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
1  18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
2  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
3  18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
4  30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
5  21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
6  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
7  17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
8  13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
9  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
10 17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
11 19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
12 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8