我是R的新人,因此我的问题可能非常简单。 我有40个浮游动物丰富的地点。
我的数据看起来像这样(列是物种丰富,行是站点)
0 0 0 0 0 2 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 85 0
0 0 0 0 0 45 5 57 0
0 0 0 0 0 13 0 3 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 7 0
0 3 0 0 12 8 0 57 0
0 0 0 0 0 0 0 1 0
0 0 0 0 0 59 0 0 0
0 0 0 0 4 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 105 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 100 0
0 35 0 55 0 0 0 0 0
1 4 0 0 0 0 0 0 0
0 0 0 0 0 34 21 0 0
0 0 0 0 0 9 17 0 0
0 54 0 0 0 27 5 0 0
0 1 0 0 0 1 0 0 0
0 17 0 0 0 54 3 0 0
我想要的是从每个站点取一个随机子样本(例如50个人)而不进行多次替换(bootstrap),以便随后计算新标准化丰度的多样性指数。
答案 0 :(得分:1)
尝试这样的事情:
mysample <- mydata[sample(1:nrow(mydata), 50, replace=FALSE),]
答案 1 :(得分:1)
OP在这里寻找的是一种为Hill或Simpson多样性指数引导数据的方法,它提供了对被采样数据的一些假设:
为此,自举程序通常会将计数模型化为一系列个体。例如,如果我们有这样的记录:
a b c
2 3 4
该记录将建模为:
aabbbcccc
然后,通常从字符串中替换一个样本以根据模型集创建一个更大的集合。
引导网站:在R中,我们有办法实现这一点,实际上使用'sample'函数非常简单。如果从列编号中进行选择,则可以使用计数数据提供概率。
# Test data.
data <- data.frame(a=2, b=3, c=4)
# Sampling from first row of data.
row <- 1
N_samples <- 50
samples <- sample(1:ncol(data), N_samples, rep=TRUE, prob=data[row,])
将样本转换为原始表的格式:现在我们有一个样本数组,每个项目都指示样本所属的列号。我们可以通过多种方式转换回原始表格格式,但这是一个使用简单计数循环的相当简单的格式:
# Count the number of each entry and store in a list.
for (i in 1:ncol(data)){
site_sample[[i]] <- sum(samples==i)
}
# Unlist the data to get an array that represents the bootstrap row.
site_sample <- unlist(site_sample)
答案 2 :(得分:0)
这应该有效。它比起初看起来要复杂一些,因为每个细胞都包含一个物种的数量。该解决方案使用 apply 函数将每行数据发送到用户定义的sample_species函数。然后我们生成 n 随机数并对它们进行排序。如果物种1中有15种,物种2中20种,物种3中20种,则1至15之间产生的随机数表示物种1,16和35表示物种2,而36-55表示物种3。
## Initially takes in a row of the data and the number of samples to take
sample_species <- function(counts,n) {
num_species <- length(counts)
total_count <- sum(counts)
samples <- sample(1:total_count,n,replace=FALSE)
samples <- samples[order(samples)]
result <- array(0,num_species)
total <- 0
for (i in 1:num_species) {
result[i] <- length(which(samples > total & samples <= total+counts[i]))
total <- total+counts[i]
}
return(result)
}
A <- matrix(sample(0:100,10*40,replace=T), ncol=10) ## mock data
B <- t(apply(A,1,sample_species,50)) ## results
答案 3 :(得分:0)
偶然发现了这个主题,而素食主义者的包有一个名为&#39; rrarify&#39;这正是你正在做的事情(在同样的生态背景下)