如何在 R 中 "group a tbl"
How to "group a tbl" in R
我正在尝试按因子级别获取数据框中的 bootstrap 行样本。为此,我使用 ddply
和 sample_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 个样本,等等...
我们可以使用 dplyr
和 purrr
。在下面的代码中,我们使用 split(.$carb)
将数据帧拆分为 carb
。 map2_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
我正在尝试按因子级别获取数据框中的 bootstrap 行样本。为此,我使用 ddply
和 sample_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 个样本,等等...
我们可以使用 dplyr
和 purrr
。在下面的代码中,我们使用 split(.$carb)
将数据帧拆分为 carb
。 map2_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