【发布时间】:2021-02-20 11:52:21
【问题描述】:
我遇到过类似的问题,但无法找到满足我特定需求的答案。
我有一个具有嵌套组设计的数据集,我需要在每个组内随机抽样(带替换),并且重新抽样事件的数量必须等于每组的样本数(即行数)。此外,嵌套组具有多列数据。请参阅下面的示例 df。
我有使用dplyr 包的代码,但我正在远离dplyr,因为我必须不断更新我的代码,因为dplyr 更改了函数名称和操作......至少可以说这很烦人。是的...我知道有几种方法可以规避这个问题,但我决定是时候抛开dplyr 的拐杖,学习如何使用R base 包执行数据争用了。
工作 dplyr 代码:
Resample_function = function(Boot)
{group_by(data1, GROUP, YEAR) %>%
slice(sample(n(), replace = TRUE))%>%
ungroup()
}
我尝试使用aggregate、ave 和apply 系列函数的各种组合...但我在base 包中处理嵌套组设计的能力至少可以说是有限的.
下面我提供了一个示例数据集 (df) 以及结果应该是什么样子。请注意,重采样会产生不同的结果,但每个嵌套组的重采样数应该相同。
最后一个请求...我对所有选项持开放态度(例如,库(data.table)、库(引导)等),因为如果其他人觉得这篇文章有用,那就太好了。此外,其中一些包可能比base 包更有效。不过,我更喜欢不需要安装和加载额外包的解决方案。
提前感谢您的帮助。
保重。
df <- read.table(text = "GROUP YEAR VAR1 VAR2
a 2018 1.0 1.0
a 2018 2.0 2.0
b 2018 10 10
b 2018 20 20
b 2018 30 30
b 2018 40 40
b 2019 50 50
b 2019 60 60
b 2019 70 70
b 2019 80 80
b 2019 90 90
b 2019 100 100
b 2019 110 110
b 2019 120 120
b 2019 130 130
b 2019 140 140
b 2019 150 150
b 2019 160 160
b 2019 170 170
b 2019 180 180
b 2020 190 190
b 2020 200 200
b 2020 210 210", header = TRUE)
result <- read.table(text = "GROUP YEAR VAR1 VAR2
a 2018 1 1
a 2018 1 1
b 2018 20 20
b 2018 30 30
b 2018 30 30
b 2018 20 20
b 2019 70 70
b 2019 170 170
b 2019 50 50
b 2019 150 150
b 2019 70 70
b 2019 150 150
b 2019 100 100
b 2019 120 120
b 2019 50 50
b 2019 160 160
b 2019 90 90
b 2019 150 150
b 2019 170 170
b 2019 180 180
b 2020 190 190
b 2020 190 190
b 2020 190 190", header = TRUE)
【问题讨论】:
标签: r