rollapply + specnumber =物种丰富度超过采样间隔长度不同?

时间:2016-08-25 11:54:14

标签: intervals zoo vegan

我有一个社区矩阵(样本x种动物)。我每周都会对这些动物进行多年采样(在这个例子中,为期三年)。我想弄清楚采样时间(开始周和持续时间a.k.a.周数)如何影响物种丰富度。以下是一个示例数据集:

Data <- data.frame(
  Year = rep(c('1996', '1997', '1998'), each = 5),
  Week = rep(c('1', '2', '3', '4', '5'), 3),
  Species1 =sample(0:5, 15, replace=T),
  Species2 =sample(0:5, 15, replace=T),
  Species3 =sample(0:5, 15, replace=T)
)

我想要的结果是:

Year  StartWeek  Duration(weeks)  SpeciesRichness 
1996    1            1                 2 
1996    1            2                 3  
1996    1            3                 1 
... 
1998    5            1                 1

我曾尝试通过rollapply和素食主义者的规格组合来做到这一点,但得到了一个样本x物种矩阵而不是物种丰富度的矢量。怪异。

例如,我认为这应该给我物种丰富度的两周采样窗口:

test<-rollapply(Data[3:5],width=2,specnumber,align="right")

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我通过将任务分解为两部分来解决这个问题: 1.使用rollapplyr总结物种丰度,在ddplyr mutate_each thingamabob中实现 2.使用素食主义者计算物种丰富度。

我分别为每个采样持续时间窗口做了这个。

这是裸骨版本(我只是通过更改width参数为我想要的每个采样持续时间连续执行此操作):

weeksum2 <- function(x) {rollapply(x, width = 2, align = 'left', sum, fill=NA)}
sum2weeks<-Data%>%
  arrange(Year, Week)%>%
  group_by(Year)%>%
  mutate_each(funs(weeksum2), -Year, -Week)


weeklyspecnumber2<-specnumber(sum2weeks[,3:ncol(sum2weeks)], 
                              groups = interaction(sum2weeks$Week, sum2weeks$Year))
weeklyspecnumber2<-unlist(weeklyspecnumber2)
weeklyspecnumber2<-as.data.frame(weeklyspecnumber2)
weeklyspecnumber2$WeekYear<-as.factor(rownames(weeklyspecnumber2))
weeklyspecnumber2<-tidyr::separate(weeklyspecnumber2, WeekYear, into = c('Week', 'Year'), sep = '[.]')