根据数据中的行数查找样本大小
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
将其转换回数据框
我有一个如下所示的数据集:
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