我有一個訓練資料集,其中包含 60,000 個觀察值,我想從中創建 9 個子集訓練集。我想隨機抽樣而不更換;我需要 3 個包含 500 個觀測值的資料集、3 個包含 1,000 個觀測值的資料集和 3 個包含 2,000 個觀測值的資料集。

如何在 R 中使用 sample() 來做到這一點?
uj5u.com熱心網友回復:
鑒于你的 data.frame 被命名df你做:
sample_sizes <- c(rep(500,3), rep(1000,3), rep(2000,3))
sampling <- sample(60000, sum(sample_sizes))
training_sets <- split(df[sampling,], rep(1:9, sample_sizes))
這對所有資料集進行抽樣而不進行替換。如果您想在每個訓練集中(但不是通過所有訓練集)進行抽樣而不進行替換:
sample_sizes <- c(rep(500,3), rep(1000,3), rep(2000,3))
sampling <- do.call(c, lapply(sample_sizes, function(i) sample(60000, i)))
training_sets <- split(df[sampling,], rep(1:9, sample_sizes))
uj5u.com熱心網友回復:
如果你希望輸出看起來像螢屏截圖,我不肯定,但如果是這樣,你去:
library(tidyverse)
df <- tibble(rand = runif(6e4))
tibble(`Sample Size` = rep(c(500,1000,2000), each = 3)) |>
mutate(name = rep(paste(c("First", "Second", "Third"), "Random Sample"), 3),
samp = map2(`Sample Size`, row_number(),
\(x,y) {set.seed(y); df[sample(1:nrow(df), size = x),]})) |>
pivot_wider(names_from = name, values_from = samp)
#> # A tibble: 3 x 4
#> `Sample Size` `First Random Sample` `Second Random Sample` Third Random Samp~1
#> <dbl> <list> <list> <list>
#> 1 500 <tibble [500 x 1]> <tibble [500 x 1]> <tibble [500 x 1]>
#> 2 1000 <tibble [1,000 x 1]> <tibble [1,000 x 1]> <tibble>
#> 3 2000 <tibble [2,000 x 1]> <tibble [2,000 x 1]> <tibble>
#> # ... with abbreviated variable name 1: `Third Random Sample`
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/529058.html
標籤:r随机的子集样本
上一篇:我可以制作一個條形圖,其中每個條形代表資料框中的一列嗎?
下一篇:向data.table添加倒計時
