我有一个像这样的数据集:
set.seed(569)
dat<- data.frame(region=c(rep(1, 20), rep(2, 10)), loc= paste("plot", "_",seq(1,30,1)),
sp1= sample(0:3, 30, replace=T),sp2= sample(0:3, 30,
replace=T),sp3= sample(0:3, 30, replace=T),sp4= sample(0:3, 30,
replace=T),sp5= sample(0:3, 30, replace=T),sp6= sample(0:3, 30,
replace=T),sp7= sample(0:3, 30, replace=T),sp8= sample(0:3, 30,
replace=T),sp9= sample(0:3, 30, replace=T),sp10= sample(0:3,
30, replace=T))
每行代表一个区域内的绘图数据。我想计算每个子集的多样性,以便我可以了解图的数量的方差如何导致区域alpha多样性的变化。这需要一个循环我不确定如何构建。首先,循环应该按区域进行子集,然后对于每个区域,我想要对单个区域进行RANDOMLY子采样x行(绘图)。然后,我将对每个子集进行预计算并存储输出。
区域子集的每次迭代应该是x-i行,直到x-(x / 2)子集被采样。因此,我想对行进行采样,直到我对一个区域内的一半行进行二次采样。因此,循环应该能够循环通过较小的数据子集并执行函数。
例如,在region 1
中,有20个图表或loc
的唯一级别。在我的第一个子样本中,我会随机选择19个图并预先形成函数。在第二个子样本中,我将随机选择18个图并继续此过程,直到我对10个图进行二次抽样。对于区域2,我只会为5个地块执行此操作。由于某些地区的地块数量不均匀,因此可能需要if else声明才能采样至少一半(如果不是更多)。
此循环应重复1000次,以便每个子集(x-i)具有1000个值。
以下是我想在每个子集上运行的函数。假设我从区域1开始并随机抽样plot_1-plot_10。
sub1<- dat[1:10,3:12]
1)首先,计算该子集内每个物种的频率总和:
sub1<-
sub1 %>%
summarise_all(funs(sum))
2)然后,计算该子集的多样性:
sub1 <- d(sub1, lev = "alpha",q=2)
这个特殊的例子会产生5.929448的alpha多样性。值需要存储在具有两列(区域,多样性)的数据框中,以便我可以按区域解开方差。