我正在尝试使用R中的替换来从数据表中引导组。
这是数据表,例如:
dat = data.table('n'=c(1,1,1,2,2,2,2,3,4,4,4,4,4),'y'=round(rnorm(13,0,1),1))
n y
1: 1 -0.8
2: 1 0.5
3: 1 -0.1
4: 2 0.2
5: 2 -0.1
6: 2 -2.7
7: 2 0.1
8: 3 0.3
9: 4 -0.7
10: 4 -0.2
11: 4 1.2
12: 4 1.2
13: 4 -0.1
一个自举样本随机抽取4组'n',所以结果可能是这样的(在这个实现中,绘制了第1,4组,绘制了两次):
n y
1: 4 -0.7
2: 4 -0.2
3: 4 1.2
4: 4 1.2
5: 4 -0.1
6: 3 0.3
7: 3 0.3
8: 1 -0.8
9: 1 0.5
10: 1 -0.1
然而,我的问题是,现在如果我按'n'分组,它认为第6行和第7行是同一个组,而实际上它们是重新采样的版本,所以我想以不同方式对待它们,例如,通过添加第三栏中写着“这是从3开始的第二组”(例如3.1和3.2)或其他可以实现这一目标的内容。
答案 0 :(得分:1)
你可以通过联接(很可能也是其他方式)来做到这一点。
首先我们生成一个bootstrap样本。这包含两个变量:新组ID bid
和样本组n
set.seed(84)
bootsample = data.table(n=sample(1:4, 4, replace=TRUE), bid=1:4)
bootsample
n bid
1: 4 1
2: 2 2
3: 4 3
4: 4 4
然后我们需要将它合并回原始数据表。由于组重复,我们应该使用allow.cartesian=TRUE
参数。您可以在后续分析中使用bid
变量组。
merge(bootsample, dat, allow.cartesian=TRUE)
n bid y
1: 2 2 1.1
2: 2 2 2.2
3: 2 2 -0.8
4: 2 2 -1.4
5: 4 1 -1.3
6: 4 1 -0.4
7: 4 1 -1.0
8: 4 1 0.9
9: 4 1 -0.3
10: 4 3 -1.3
11: 4 3 -0.4
12: 4 3 -1.0
13: 4 3 0.9
14: 4 3 -0.3
15: 4 4 -1.3
16: 4 4 -0.4
17: 4 4 -1.0
18: 4 4 0.9
19: 4 4 -0.3
可能有更紧凑的解决方案。请注意,如果引导组的大小不同,可能会给您带来各种问题,具体取决于您使用引导数据的方式。