R 生成刀切采样期间生成的数据帧对象

R 生成刀切采样期间生成的数据帧对象,r,sampling,resampling,statistics-bootstrap,R,Sampling,Resampling,Statistics Bootstrap,这篇文章经过编辑,以便更准确地描述情况。我在工作中使用了一种刀切取样方式。jackknifed数据将用于模型校准,未使用的数据将用于验证 与立即执行分析不同,我希望将jackknifed样本保存为数据帧,以及为每个样本删除的数据 这很难解释,所以我将用一个例子来说明: 本例的目的是创建4次数据集。每次应有2个数据集-1个长度为9的数据集为校准数据集,1个长度为3的数据集为验证数据集 df <- data.frame(value1 = 1:(3*4), value2

这篇文章经过编辑,以便更准确地描述情况。我在工作中使用了一种刀切取样方式。jackknifed数据将用于模型校准,未使用的数据将用于验证

与立即执行分析不同,我希望将jackknifed样本保存为数据帧,以及为每个样本删除的数据

这很难解释,所以我将用一个例子来说明: 本例的目的是创建4次数据集。每次应有2个数据集-1个长度为9的数据集为校准数据集,1个长度为3的数据集为验证数据集

df <-
  data.frame(value1 = 1:(3*4),
          value2 = seq(from = 1000, by = 50, length.out = 3*4),
          tosplit = rep(1:4, each = 3))

df #df represents the dataframe in its entirety

dfs <- split(df, df$tosplit) #df is now split into 4 equal parts of 3

#####

> #Replicate 1
> r1_3parts <- do.call("rbind", dfs[1:3])
> r1_1parts <- do.call("rbind", dfs[4])
> 
> r1_3parts
    value1 value2 tosplit
1.1      1   1000       1
1.2      2   1050       1
1.3      3   1100       1
2.4      4   1150       2
2.5      5   1200       2
2.6      6   1250       2
3.7      7   1300       3
3.8      8   1350       3
3.9      9   1400       3
> r1_1parts
     value1 value2 tosplit
4.10     10   1450       4
4.11     11   1500       4
4.12     12   1550       4
> 
> #Replicate 2
> r2_3parts <- do.call("rbind", dfs[2:4])
> r2_1parts <- do.call("rbind", dfs[1])
> 
> r2_3parts
     value1 value2 tosplit
2.4       4   1150       2
2.5       5   1200       2
2.6       6   1250       2
3.7       7   1300       3
3.8       8   1350       3
3.9       9   1400       3
4.10     10   1450       4
4.11     11   1500       4
4.12     12   1550       4
> r2_1parts
    value1 value2 tosplit
1.1      1   1000       1
1.2      2   1050       1
1.3      3   1100       1
> 
> #Replicate 3
> r3_3parts <- do.call("rbind", dfs[c(3:4, 1)])
> r3_1parts <- do.call("rbind", dfs[2])
> 
> r3_3parts
     value1 value2 tosplit
3.7       7   1300       3
3.8       8   1350       3
3.9       9   1400       3
4.10     10   1450       4
4.11     11   1500       4
4.12     12   1550       4
1.1       1   1000       1
1.2       2   1050       1
1.3       3   1100       1
> r3_1parts
    value1 value2 tosplit
2.4      4   1150       2
2.5      5   1200       2
2.6      6   1250       2
> 
> 
> #Replicate 4
> r4_3parts <- do.call("rbind", dfs[c(4, 1:2)])
> r4_1parts <- do.call("rbind", dfs[3])
> 
> r4_3parts
     value1 value2 tosplit
4.10     10   1450       4
4.11     11   1500       4
4.12     12   1550       4
1.1       1   1000       1
1.2       2   1050       1
1.3       3   1100       1
2.4       4   1150       2
2.5       5   1200       2
2.6       6   1250       2
> r4_1parts
    value1 value2 tosplit
3.7      7   1300       3
3.8      8   1350       3
3.9      9   1400       3
> 

在我能找到的包中,这似乎不是一个选项——它们默认只为您创建统计数据。我想要的是查看示例数据集,并指定它们的相对大小。在现有软件包中是否可能实现这一点?如果不可能,是否有合适的方法以更自动化的方式确定这一点?

如果没有随机组件,这对我来说并不是一个引导。看起来你在追求排列的变异

数据帧可以用一个相当简单的函数分割

df <-
  data.frame(value1 = 1:(3*4),
             value2 = seq(from = 1000, by = 50, length.out = 3*4),
             tosplit = rep(1:4, each = 3))

split_into_two <- function(data, split_var, split_val){
  split <- data[[split_var]] %in% split_val

  split(data, split)
}

split_into_two(df, "tosplit", 1:3)

这节省了大量复制粘贴。

谢谢@Benjamin。我被告知这是自举,并且在与我的博士生导师的所有讨论中都被称为自举。但我现在看到一个更合适的定义实际上是折刀重采样。我将更新描述以适应此情况。
lapply(list(1:3, 2:4, c(4, 1:2), c(3:4, 1)),
       function(x) split_into_two(df, "tosplit", x))