R 通过在每个区域随机抽样一个站点,但保留不同年份的行,对数据进行子集划分

R 通过在每个区域随机抽样一个站点,但保留不同年份的行,对数据进行子集划分,r,random,sampling,R,Random,Sampling,这是来自的扩展qestion 从下面的示例数据中,我想通过从每个区域随机抽样一个站点来生成多个数据帧。若要制作另一个数据帧,请在不替换的情况下,对站点进行另一个随机抽样;也就是说,在任何先前的采样中采样的给定区域的同一站点不能被采样。因此,数据帧的数量将与区域内站点的数量一样多。我问题的这一部分在上面的链接中得到了回答(尽管我在该网站上找不到接受该答案的复选标记) 我这里的问题是关于我的另一个数据框架,它包含给定站点多年的数据。我希望每个数据框包含唯一的区域站点组合(在上面的链接中回答),但具有

这是来自的扩展qestion

从下面的示例数据中,我想通过从每个区域随机抽样一个站点来生成多个数据帧。若要制作另一个数据帧,请在不替换的情况下,对站点进行另一个随机抽样;也就是说,在任何先前的采样中采样的给定区域的同一站点不能被采样。因此,数据帧的数量将与区域内站点的数量一样多。我问题的这一部分在上面的链接中得到了回答(尽管我在该网站上找不到接受该答案的复选标记)

我这里的问题是关于我的另一个数据框架,它包含给定站点多年的数据。我希望每个数据框包含唯一的区域站点组合(在上面的链接中回答),但具有所有年份的数据。以下是一个示例数据(给定区域的年数和地点数存在一些差异):

我试图修改上面链接中提供的代码,但没有成功。这是我试过的代码

library(data.table)
dt <- setDT(mydf)
dt <- dt[sample(.N)]
dt <- unique(dt, by = c('Year','Region'))
dt[, .SD[1], by=c("Region","Year")]
库(data.table)

dt由于每个“区域/站点”组合没有重复的“年份”,在转换为“data.table”(
setDT(mydf)
)后,按“区域”分组,我们
sample
对“站点”的
唯一的
元素进行采样,得到行索引(
.I
),其中采样元素等于“站点”,提取行索引(
$V1
),使用它来子集数据集的行

setDT(mydf)[mydf[,  .I[Site ==sample(unique(Site), 1)], .(Region)]$V1]
#   V1 V2 Region Site Year
#1:  5  1      A   X1 2000
#2:  1  1      A   X1 2001
#3:  3  1      B   X2 2000
#4:  4  4      B   X2 2001
#5:  1  2      C   X1 2000
#6:  9  4      C   X1 2001

如果我们需要复制它,我们可以使用
replicate

setDT(mydf)
lst <- replicate(5, mydf[mydf[,  .I[Site ==sample(unique(Site), 1)],
                .(Region)]$V1], simplify = FALSE)

如何在不重新使用给定区域的相同站点的情况下重复此过程?我想创建多个独立的数据帧。@清崎更新了帖子。最好有一个data.frames的
列表,而不是单个data.frame对象。Replicate()生成的数据帧包含相同的站点。是否有解决方案使给定区域的给定站点仅出现在一个数据帧中?@kiyoshisaki在这种情况下,
示例
部分在一两次绘图后变得不相关。您能找出我为什么会出现此错误吗?
[.data.table
(mydf,tmp,on=)中的错误。(区域、站点):找不到函数“”
setDT(mydf)[mydf[,  .I[Site ==sample(unique(Site), 1)], .(Region)]$V1]
#   V1 V2 Region Site Year
#1:  5  1      A   X1 2000
#2:  1  1      A   X1 2001
#3:  3  1      B   X2 2000
#4:  4  4      B   X2 2001
#5:  1  2      C   X1 2000
#6:  9  4      C   X1 2001
setDT(mydf)
lst <- replicate(5, mydf[mydf[,  .I[Site ==sample(unique(Site), 1)],
                .(Region)]$V1], simplify = FALSE)
setDT(mydf)
mydf1 <- copy(mydf)
lst1 <- vector("list", 3)
for(i in 1:3){
  tmp <- mydf[, .(Site = sample(unique(Site), 1)), Region]
  lst1[[i]] <-  mydf[tmp, on = .(Region, Site)]
   mydf <- mydf[mydf[tmp, Site != i.Site, on = .(Region)]]
 } 

lst1
#[[1]]
#   V1 V2 Region Site Year
#1:  5  6      A   X2 2000
#2:  2  2      A   X2 2001
#3:  3  3      B   X1 2000
#4:  2  3      B   X1 2001
#5:  4  5      C   X2 2000
#6:  6  7      C   X2 2001

#[[2]]
#   V1 V2 Region Site Year
#1:  5  1      A   X1 2000
#2:  1  1      A   X1 2001
#3:  7  8      B   X3 2000
#4:  1  2      C   X1 2000
#5:  9  4      C   X1 2001

#[[3]]
#   V1 V2 Region Site Year
#1:  8  9      A   X3 2000
#2:  5  5      A   X3 2001
#3:  3  1      B   X2 2000
#4:  4  4      B   X2 2001