根据列生成 bootstrap 个样本
generate bootstrap sample dependent on column
我有这样的数据集
set.seed(1)
df <- data.frame(ID = rep(1:4, each = 3),
x = c(1,2,3,2,3,4,1,2,3,3,4,5),
V1 = rnorm(12))
> df
ID x V1
1 1 1 -0.6264538
2 1 2 0.1836433
3 1 3 -0.8356286
4 2 2 1.5952808
5 2 3 0.3295078
6 2 4 -0.8204684
7 3 1 0.4874291
8 3 2 0.7383247
9 3 3 0.5757814
10 4 3 -0.3053884
11 4 4 1.5117812
12 4 5 0.3898432
此示例包含 4 个人,由 ID
定义。
每个人都有一个观察期x
。例如,在时间点 1、2、3 观察到 ID 1。
在此示例中,我在时间点 1(ID 1 和 ID 3)有 2 个观察值,
和时间点 2 的 3 个观测值(ID 1,2,3)
我现在想要一个在每个时间点包含相同数量观察值的自举(带替换样本)数据集。
在此示例中,数据集可能如下所示:
> df
ID x V1
1 1 1 -0.6264538
1 1 1 -0.6264538
2 1 2 0.1836433
2 1 2 0.1836433
3 1 3 -0.8356286
4 2 2 1.5952808
5 2 3 0.3295078
6 2 4 -0.8204684
6 2 4 -0.8204684
7 3 1 0.4874291
7 3 1 0.4874291
8 3 2 0.7383247
9 3 3 0.5757814
10 4 3 -0.3053884
11 4 4 1.5117812
11 4 4 1.5117812
12 4 5 0.3898432
12 4 5 0.3898432
12 4 5 0.3898432
12 4 5 0.3898432
这个数据集现在每个时间点有 4 个观测值。
我们可以先找到每个 x
和 sample_n
出现的最大次数 x
和 replace = TRUE
以获得每个 [=11] 相同的行数=].
max_sample <- max(table(df$x))
library(dplyr)
df %>%
group_by(x) %>%
sample_n(max_sample, replace = TRUE) %>%
arrange(x)
# ID x V1
# <int> <dbl> <dbl>
# 1 3 1 0.487
# 2 1 1 -0.626
# 3 1 1 -0.626
# 4 1 1 -0.626
# 5 3 2 0.738
# 6 2 2 1.60
# 7 2 2 1.60
# 8 3 2 0.738
# 9 4 3 -0.305
#10 2 3 0.330
#11 2 3 0.330
#12 4 3 -0.305
#13 4 4 1.51
#14 4 4 1.51
#15 4 4 1.51
#16 4 4 1.51
#17 4 5 0.390
#18 4 5 0.390
#19 4 5 0.390
#20 4 5 0.390
我有这样的数据集
set.seed(1)
df <- data.frame(ID = rep(1:4, each = 3),
x = c(1,2,3,2,3,4,1,2,3,3,4,5),
V1 = rnorm(12))
> df
ID x V1
1 1 1 -0.6264538
2 1 2 0.1836433
3 1 3 -0.8356286
4 2 2 1.5952808
5 2 3 0.3295078
6 2 4 -0.8204684
7 3 1 0.4874291
8 3 2 0.7383247
9 3 3 0.5757814
10 4 3 -0.3053884
11 4 4 1.5117812
12 4 5 0.3898432
此示例包含 4 个人,由 ID
定义。
每个人都有一个观察期x
。例如,在时间点 1、2、3 观察到 ID 1。
在此示例中,我在时间点 1(ID 1 和 ID 3)有 2 个观察值, 和时间点 2 的 3 个观测值(ID 1,2,3)
我现在想要一个在每个时间点包含相同数量观察值的自举(带替换样本)数据集。
在此示例中,数据集可能如下所示:
> df
ID x V1
1 1 1 -0.6264538
1 1 1 -0.6264538
2 1 2 0.1836433
2 1 2 0.1836433
3 1 3 -0.8356286
4 2 2 1.5952808
5 2 3 0.3295078
6 2 4 -0.8204684
6 2 4 -0.8204684
7 3 1 0.4874291
7 3 1 0.4874291
8 3 2 0.7383247
9 3 3 0.5757814
10 4 3 -0.3053884
11 4 4 1.5117812
11 4 4 1.5117812
12 4 5 0.3898432
12 4 5 0.3898432
12 4 5 0.3898432
12 4 5 0.3898432
这个数据集现在每个时间点有 4 个观测值。
我们可以先找到每个 x
和 sample_n
出现的最大次数 x
和 replace = TRUE
以获得每个 [=11] 相同的行数=].
max_sample <- max(table(df$x))
library(dplyr)
df %>%
group_by(x) %>%
sample_n(max_sample, replace = TRUE) %>%
arrange(x)
# ID x V1
# <int> <dbl> <dbl>
# 1 3 1 0.487
# 2 1 1 -0.626
# 3 1 1 -0.626
# 4 1 1 -0.626
# 5 3 2 0.738
# 6 2 2 1.60
# 7 2 2 1.60
# 8 3 2 0.738
# 9 4 3 -0.305
#10 2 3 0.330
#11 2 3 0.330
#12 4 3 -0.305
#13 4 4 1.51
#14 4 4 1.51
#15 4 4 1.51
#16 4 4 1.51
#17 4 5 0.390
#18 4 5 0.390
#19 4 5 0.390
#20 4 5 0.390