来自单个组的dplyr样本
我有一些数据,其中观察数量的总结如下:来自单个组的dplyr样本,r,dplyr,R,Dplyr,我有一些数据,其中观察数量的总结如下: # A tibble: 14 x 3 # Groups: status [2] status year n <dbl> <dbl> <int> 1 0 2010 4593 2 0 2011 10990 3 0 2012 27711 4 0 2013 99989 5 0 2014 95407 6 0 2015
# A tibble: 14 x 3
# Groups: status [2]
status year n
<dbl> <dbl> <int>
1 0 2010 4593
2 0 2011 10990
3 0 2012 27711
4 0 2013 99989
5 0 2014 95407
6 0 2015 89010
7 0 2016 72289
8 1 2010 584
9 1 2011 785
10 1 2012 640
11 1 2013 667
12 1 2014 377
13 1 2015 460
14 1 2016 104
我想这会管用的
dat
是您的示例数据帧。下面的代码按status
分割数据帧,然后使用imap
评估是否需要采样。如果列表元素的名称为“0”
,它将进行采样。您可以将size=1
更改为实际数据帧的最小数目
library(dplyr)
library(purrr)
dat2 <- dat %>%
split(f = .$status) %>%
imap(function(x, y){
if (y %in% "0"){
x <- x %>%
group_by(status, year) %>%
sample_n(size = 1)
}
return(x)
}) %>%
bind_rows()
库(dplyr)
图书馆(purrr)
dat2%
拆分(f=.$状态)%>%
imap(函数(x,y){
如果(y%在%“0”中){
x%
分组依据(状态,年份)%>%
样品(尺寸=1)
}
返回(x)
}) %>%
绑定_行()
你所说的类n是什么意思?你想要的输出是什么?另外,“通过4593随机抽样0类观察值”是否意味着您想要sample_n()
其中size=4593
?抱歉,该类引用了状态变量,该变量有两个类别0
和1
。我想根据或筛选类0
变量对u进行分组,然后每年对这些变量进行随机抽样。使用类似于sample\u n()
和size=4593
的东西是我想要的是,但是在执行data%>%groupby(status,year)%%>%sample\u n(size=4593)
时,这不起作用,因为它返回错误:大小必须小于或等于584(数据大小),设置replace=TRUE以使用带替换的采样
。设置replace=TRUE
也不能提供正确的输出。工作正常。谢谢
library(dplyr)
library(purrr)
dat2 <- dat %>%
split(f = .$status) %>%
imap(function(x, y){
if (y %in% "0"){
x <- x %>%
group_by(status, year) %>%
sample_n(size = 1)
}
return(x)
}) %>%
bind_rows()