rollapply + specnumber = богатство видов в интервалах выборки, которые различаются по длине?

У меня есть матрица сообщества (образцы x виды животных). Я брал пробы у животных еженедельно в течение многих лет (в данном примере — трех лет). Я хочу выяснить, как время отбора проб (неделя начала и продолжительность, также известная как количество недель) влияет на видовое богатство. Вот примерный набор данных:

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's specnumber, но получил образец матрицы x видов вместо вектора видового богатства. Странный.

Например, я подумал, что это должно дать мне видовое богатство для двухнедельного окна выборки:

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

Спасибо за помощь!


person Ashley Asmus    schedule 25.08.2016    source источник


Ответы (1)


Я понял это, разбив задачу на две части: 1. Подведение итогов численности видов с помощью rollapplyr, как это реализовано в ddplyr mutate_each thingamabob 2. Расчет видового богатства с помощью вегана.

Я сделал это для каждого окна длительности выборки отдельно.

Вот версия с голыми костями (я просто делал это последовательно для каждой продолжительности выборки, которую хотел, изменяя аргумент ширины):

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 = '[.]')
person Ashley Asmus    schedule 25.08.2016