2016-08-25 8 views
1

У меня есть матрица сообщества (образцы х видов животных). Я пробовал животных еженедельно на протяжении многих лет (в этом примере три года). Я хочу выяснить, как время выборки (начальная неделя и продолжительность a.k.a. количество недель) влияет на богатство видов. Вот набор примеров данных:rollapply + specnumber = видовое богатство по интервалам выборки, которые различаются по длине?

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

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

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

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

ответ

0

Я понял это, разбивая задачу на две части: 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 = '[.]') 

 Смежные вопросы

  • Нет связанных вопросов^_^