2016-07-19 8 views
1

Ich habe eine Liste, die so aussieht. Ich habe es nach 'ID' aufgeteilt, was zu etwa 1.400 verschiedenen Komponenten der Liste führt (jeder ist ein anderer Ort, der mehrere Arten von Beobachtungen enthält).R: mit der Funktion apply auf einer Liste, um den Mittelwert mehrerer Werte zu erhalten

    ID Species 2013  2008  2003 
      AA 1501106  11 1751.047 1504.080 1580.337  
      AA 1501106  11 1856.224 1678.837 1592.824  
      AA 1502114  11 1766.527 1519.468 1647.180  

So, jetzt weiß ich, dass ich einzelne Komponenten und Zusammenfassung zur Auswahl() gibt mir die Mittel, Median, etc. von jedem dieser spezifischen Element für das Jahr 2013, 2008 und 2003, aber mit so vielen Komponenten, wird verwirrend

zu sortieren Was Ich mag würde in der Lage sein, den Mittelwert der einzelnen Komponenten pro Jahr zu erhalten (so den Mittelwert für das Jahr 2013, 2008 und 2003)

mit

apply(plot_list,mean) 

funktioniert nicht, vermutlich weil die Liste nicht nur eine Spalte ist.

irgendwelche Ideen, wie ich das lösen kann?

+0

Die Datenstruktur Sie sieht mehr wie data.frame dann Liste zeigen. Haben Sie eine Liste dieser Datenrahmen? Wenn das der Fall ist, kannst du deine eigenen Funktionsberechnungsmittel deiner Struktur schreiben und dann mit deiner Funktion anwenden (oder plattest wenn es auf der Liste steht) ... –

Antwort

0

Was ist mit dem folgenden:

lapply(myList, FUN=function(i) sapply(i[, 3:5], mean)) 

Dies setzt voraus, dass Ihre Liste, die ich myList genannt, ist eine Liste der data.frames mit der gleichen Struktur: 5 Spalten, in denen die letzten drei Spalten sind die für welches du den Mittelwert berechnen willst.

Dies wird eine Liste zurück, wobei jedes Element ein Vektor der Länge 3.

+0

Das hat perfekt funktioniert! Es hat nicht geklickt, dass ich eine Liste von data.frames hatte. Vielen Dank für deine Hilfe – isabelnt

0

Wir colMeans nach Looping durch die list mit lapply

lapply(myList, function(x) colMeans(x[3:5])) 

jedoch verwenden können, ein besserer Ansatz könnte sei es, die Funktion auf einen einzelnen Datensatz anzuwenden, indem entweder dplyr

library(dplyr) 
bind_rows(myList) %>% 
      group_by(ID, Species) %>% 
      summarise_each(funs(mean)) 
verwendet wird

oder data.table Methoden

library(data.table) 
rbindlist(myList)[, lapply(.SD, mean), by = .(ID, Species)] 
Verwandte Themen