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

rollapply + specnumber = species richness over sampling intervals that vary in length?

我有一个社区矩阵(样本 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 和 vegan 的 specnumber 的组合来做到这一点,但得到的是样本 x 物种矩阵而不是物种丰富度向量。奇怪。

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

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

感谢您的帮助!

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

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

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

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 = '[.]')