R 采样以从每组中获取最大数量

R 采样以从每组中获取最大数量,r,dplyr,sample,R,Dplyr,Sample,使用下面这个非常简单的数据示例,我的目标是对A中的所有3个进行采样,并且只对B中的7个进行采样 id group 1 A 2 A 3 A 4 B 5 B 6 B 7 B 8 B 9 B 10 B ex_df <- data.frame(id = 1:10, group = c(rep("A", 3), rep("B", 7))

使用下面这个非常简单的数据示例,我的目标是对
A
中的所有3个进行采样,并且只对
B
中的7个进行采样

 id   group
  1       A
  2       A
  3       A
  4       B
  5       B
  6       B
  7       B
  8       B
  9       B
 10       B

ex_df <- data.frame(id = 1:10, group = c(rep("A", 3), rep("B", 7)))
但这会导致错误(由于明显的原因)

错误:
size
必须小于或等于2(数据大小),已设置
replace
=使用带替换的采样为TRUE

但用替代品取样不是一种选择。是否有任何方法可以将
sample\n
大小设置为最小5或组的大小


或者是我不知道的另一个函数可以实现这个功能?

我也遇到了同样的问题,下面是我所做的

library(dplyr)

split_up <- split(ex_df, f = ex_df$group)
#split original dataframe into a list of dataframes for each unique group

sel_5 <- lapply(split_up, function(x) {x %>% sample_n(ifelse(nrow(x) < 5, nrow(x), 5))})
#on each dataframe, subsample to 5 or to the number of rows if there are less than 5

sel_5 <- do.call("rbind", sel_5)
#bind it back up!
库(dplyr)
分开
library(dplyr)

split_up <- split(ex_df, f = ex_df$group)
#split original dataframe into a list of dataframes for each unique group

sel_5 <- lapply(split_up, function(x) {x %>% sample_n(ifelse(nrow(x) < 5, nrow(x), 5))})
#on each dataframe, subsample to 5 or to the number of rows if there are less than 5

sel_5 <- do.call("rbind", sel_5)
#bind it back up!