来自单个组的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()