gpt4 book ai didi

不放回随机抽样网格

转载 作者:行者123 更新时间:2023-12-04 05:15:52 24 4
gpt4 key购买 nike

我想在没有替换的情况下随机采样一个数据集,并认为这很容易。不幸的是,对我来说不是,我无法在互联网上找到 R 代码来做到这一点。最终我得到了这段代码。这看起来过于复杂,但它似乎确实有效。

set.seed(1234)

n.samples <- 10

my.grid <- read.table(text = '
state county y2000 y2001 y2002 y2003 y2004 y2005 y2006
A A 5 10 15 20 25 30 35
A B 15 20 25 30 35 40 45
A C 45 40 35 30 25 20 15
A Q 1 2 3 4 5 6 7
B A 9 8 7 6 5 4 3
B B 90 91 92 93 94 95 96
B G 10 20 30 40 50 60 70
B H 100 200 300 400 500 600 700
C J 900 850 800 750 700 650 600
C K 2 4 6 8 10 12 14
C M 3 6 9 12 15 18 21
C P 50 45 40 35 30 25 20
', header = TRUE)

my.grid

population <- expand.grid(row = c(seq(1,nrow(my.grid))),
col = c(seq(3,ncol(my.grid))))

rows <- seq(1, nrow(population))

sample <- sample(rows, n.samples, replace=FALSE)

use.these <- population[sample,]
use.these

measurement <- rep(NA, nrow(use.these))
my.area <- my.grid[use.these[,1], c(1:2)]
my.year <- names(my.grid)[use.these[,2]]

for(i in 1:nrow(use.these)) {

measurement[i] <- my.grid[use.these[i,1], use.these[i,2]]

}

my.samples <- data.frame(use.these, my.area, my.year, measurement)
my.samples
my.samples 的输出:
   row col state county my.year measurement
10 10 3 C K y2000 2
52 4 7 A Q y2004 5
50 2 7 A B y2004 35
51 3 7 A C y2004 25
69 9 8 C J y2005 650
81 9 9 C J y2006 600
1 1 3 A A y2000 5
18 6 4 B B y2001 91
79 7 9 B G y2006 70
39 3 6 A C y2003 30

有没有更好的方法,特别是在基地?我听说过 sampling包。由于我的代码似乎可以工作,而且我只是在寻求可能的更好方法,也许我不应该在这里发布它,尽管它似乎是一个常见且重要的话题。如果这不是一个合适的帖子,我可以删除它并将代码放在我的维基百科用户页面上。谢谢你的任何建议。

最佳答案

将年份列转换为矩阵;从 row * col ( = length ) 采样作为索引。使用 1+(idx %/% nrow(.)) 作为原始行的索引,使用 1 + (idx %% ncol(.)) 作为年份名称的索引。那么你就不需要“没有 steenking 循环”。这是一个非常好的问题,也许可以让您摆脱循环思维。

set.seed(1234)
n.samples <- 10
size <- length(mat); picks <- sample(size, n.samples)
picks
# [1] 10 52 50 51 69 81 1 18 79 39
cbind(my.grid[ 1+(picks %/% nrow(my.grid) ), 1:2] ,
names(my.grid)[-(1:2)][1+(picks %% 7)],
mat[picks])
#---------------------------------------
state county names(my.grid)[-(1:2)][1 + (picks%%7)] mat[picks]
1 A A y2003 2
5 B A y2003 5
5.1 B A y2001 35
5.2 B A y2002 25
6 B B y2006 650
7 B G y2004 600
1.1 A A y2001 5
2 A B y2004 91
7.1 B G y2002 70
4 A Q y2004 30

关于不放回随机抽样网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14288607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com