根据数据中的行数查找样本大小

Fid sample size based on num of rows in data

我有一个如下所示的数据集:

Region Name
Region 1 Name 14
Region 2 Name 18
Region 2 Name 2
Region 2 Name 21
Region 2 Name 44
Region 3 Name 64
Region 3 Name 24
Region 4 Name 1
Region 4 Name 1
Region 4 Name 98
Region 5 Name 98
Region 5 Name 8
Region 5 Name 8
Region 5 Name 8
Region 5 Name 98

我需要按区域分解数据,然后 select 根据区域中的行数随机抽取每个区域“名称”的 5%。

假设区域 2 中有 30 个名称,那么我需要一个 3*.05 的随机样本。如果区域 6 有 50 个名字,那么我需要一个 5*.05 的随机样本。

到目前为止,我已经能够使用

split() 数据

d = split(data, f = data$Region)

但是当我尝试 运行 一个 lapply 函数时,我收到一个错误,指出 split() 提供的列表中的行数不同

lapply(data, function(x) {
 sample_n(data, nrow(d)*.05)
} ) 

有什么想法吗?

谢谢

这是一个基本的 R 解决方案。

lapply(split(data, data$Region),
       \(x) x[sample(nrow(x), nrow(x) * 0.05),])

然后您可以使用 rbind

将其转换回数据框