如何";a组待定“;在R
我试图通过因子级别获取数据帧中行的引导样本。为此,我使用了如何";a组待定“;在R,r,dplyr,plyr,R,Dplyr,Plyr,我试图通过因子级别获取数据帧中行的引导样本。为此,我使用了ddply和sample\n。但是,我需要为sample\n设置一个size参数,因为这会返回一条错误消息: ddply (mtcars, .(carb), .fun = sample_n, replace=TRUE) 在?示例中,我阅读了大小参数,即如果tbl是分组,大小适用于每个组。我想这就是我要找的,但是我找不到关于如何对tbl参数进行分组的任何其他信息。是否尚未在ddply函数中分组 请注意,我不想对固定数量的行运行上述函数(e
ddply
和sample\n
。但是,我需要为sample\n
设置一个size
参数,因为这会返回一条错误消息:
ddply (mtcars, .(carb), .fun = sample_n, replace=TRUE)
在?示例
中,我阅读了大小
参数,即如果tbl是分组,大小适用于每个组。我想这就是我要找的,但是我找不到关于如何对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
)中的每个元素应用函数,然后返回组合数据帧.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
我们可以使用
dplyr
和purrr
。在下面的代码中,我们使用split(.$carb)
按carb
拆分数据帧map2_df
可以通过列表(.x
,这里是拆分数据帧的列表)和向量或列表(.y
)中的每个元素应用函数,然后返回组合数据帧.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
有没有一种方法可以通过“小组”获得与该小组观察结果相同数量的样本?@EuGENE请查看我的更新。我想我找到了一种方法。为什么不使用
map_-df(~.x%>%sample_-n(size=nrow(.x),replace=TRUE))
而不是map2_-df()`来获得与组中观察值数量相匹配的样本呢?@NateDay感谢分享这个好的解决方案。在最初的帖子中,OP指出,对于carb=2级,有10个样本,对于carb=3级,有3个样本,所以我假设OP可能想要定义每组的样本量。我想这就是为什么我提出了map2_-df
解决方案。但是,如果OP希望样本大小与行号完全相同,那么您的解决方案会更好,因为OP不需要再次指定样本大小。啊哈,我错过了问题中关于每组大小的规定。。。我刚才在看下面的评论。有没有办法按“组”获得和该组观察结果一样多的样本?@EuGENE请查看我的更新。我想我找到了一种方法。为什么不使用map_-df(~.x%>%sample_-n(size=nrow(.x),replace=TRUE))
而不是map2_-df()`来获得与组中观察值数量相匹配的样本呢?@NateDay感谢分享这个好的解决方案。在最初的帖子中,OP指出,对于carb=2级,有10个样本,对于carb=3级,有3个样本,所以我假设OP可能想要定义每组的样本量。我想这就是为什么我提出了map2_-df
解决方案。但是,如果OP希望样本大小与行号完全相同,那么您的解决方案会更好,因为OP不需要再次指定样本大小。啊哈,我错过了问题中关于每组大小的规定。。。我只是在看下面的评论。