2016-08-25 1 views
1

Ich habe eine Gemeinschaftsmatrix (Proben x Tierarten). Ich probierte die Tiere wöchentlich über viele Jahre (in diesem Beispiel drei Jahre). Ich möchte herausfinden, wie sich das Sampling-Timing (Startwoche und -dauer a.ka.a. Anzahl der Wochen) auf den Artenreichtum auswirkt. Hier ist ein Beispiel Datensatz:rollapply + specnumber = Artenreichtum über unterschiedliche Stichprobenintervalle?

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) 
) 

Das Ergebnis, das ich will, ist etwas entlang der Linien von:

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

ich versucht hatte, dies zu tun durch eine Kombination von rollapply und vegan des specnumber, bekam aber ein Probe x Spezies-Matrix anstelle eines Vektors der Artenreichtum. Seltsam.

Zum Beispiel dachte ich, dass dies mir Artenreichtum für Abtastfenster von 2 Wochen geben soll:

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

Vielen Dank für Ihre Hilfe!

Antwort

0

ich es herausgefunden, indem die Aufgabe in zwei Teile zerbrechen: 1. Arten Abundanz mit rollapplyr zusammenfassend, wie in einem ddplyr implementiert mutate_each 2. Berechnung Arten thingamabob vegan Reichtum verwendet wird.

Ich habe dies für jede Sampling-Dauer Fenster getrennt. Hier

ist die nackte Knochen-Version (Ich habe gerade diese nacheinander für jede Abtastdauer, die ich durch Ändern der Breite Argument wollte):

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