我有一个社区矩阵(样本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")
感谢您的帮助!
答案 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 = '[.]')