【发布时间】:2023-04-11 01:12:01
【问题描述】:
我想从我的数据集中抽取一个随机样本,对因子变量的每个值使用不同的比例,以及使用存储在其他列中的权重。 dplyr 管道中的解决方案将是首选,因为它可以很容易地插入到长代码中。
我们以iris 数据集为例。 Species 列分为三个值,每个值 50 行。我们还假设样本权重存储在Sepal.Length 列中。如果我必须对每个物种进行等比例(或等行)的抽样,问题很容易解决
library(tidyverse)
iris %>% group_by(Species) %>% slice_sample(prop = 0.1, weight_by = Sepal.Length)
# A tibble: 15 x 5
# Groups: Species [3]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <fct>
1 5.4 3.7 1.5 0.2 setosa
2 5.3 3.7 1.5 0.2 setosa
3 5.7 4.4 1.5 0.4 setosa
4 5 3.5 1.6 0.6 setosa
5 4.8 3.1 1.6 0.2 setosa
6 6.1 2.9 4.7 1.4 versicolor
7 6.7 3.1 4.7 1.5 versicolor
8 5 2 3.5 1 versicolor
9 7 3.2 4.7 1.4 versicolor
10 5.7 2.9 4.2 1.3 versicolor
11 7.2 3.2 6 1.8 virginica
12 6.7 2.5 5.8 1.8 virginica
13 6.4 2.8 5.6 2.1 virginica
14 6.3 3.3 6 2.5 virginica
15 7.2 3 5.8 1.6 virginica
但是当我必须为每个物种选择/采样不同的比例时,我遇到了困难,比如分别为 10%、20%、25%。
iris %>% group_by(Species) %>% slice_sample(prop = c(0.1, 0.2, 0.25), weight_by = Sepal.Length)
#Error: `prop` must be a single number
或
iris %>% group_split(Species) %>% map_df(c(0.1, 0.2, 0.25), ~ slice_sample(prop = ., weight_by = Sepal.Length))
# A tibble: 0 x 0
请帮忙
【问题讨论】: