Seite 1 von 2

Mittlere Artenzahl berechnen (Mittelwert)

BeitragVerfasst: Do 11. Jul 2019, 20:42
von krissie
Hallo,

für meine Masterarbeit möchte ich die mittlere Artenanzahl berechnen. Dafür benötige ich zunächst die Anzahl der Arten pro Spalte und dann den Mittelwert von bestimmten Spaltenabschnitten: Also der Mittelwert nur von den Spalten A1 bis A8 (V2 bis V9), dann nur von B1 bis B8 (V10 bis V17) usw. Der Datensatz erstreckt sich über etwa 500 Spalten. Wie kann ich die Mittelwerte für die einzelnen Spaltenabschnitte aggregierend berechnen?

Bitte helft mir!!

Viele Grüße,
Krissie

Re: Mittlere Artenzahl berechnen (Mittelwert)

BeitragVerfasst: Sa 13. Jul 2019, 07:08
von jogo
Hallo Krissie,

das sieht so aus, als wenn beim Einlesen der Daten etwas schief gelaufen ist.
Kannst Du bitte mal den Output von
Code: Alles auswählen
str(drygrassland_ohne_D[, 1:20])
in Deine nächste Nachricht kopieren?

Gruß, Jörg

Re: Mittlere Artenzahl berechnen (Mittelwert)

BeitragVerfasst: Sa 13. Jul 2019, 11:57
von krissie
Hallo Jörg,

vielen Dank für deine Hilfe!

Hier ist der Output...

'data.frame': 208 obs. of 20 variables:
$ V1 : Factor w/ 205 levels "Achillea_millefolium_agg_",..: 134 49 79 84 130 166 172 120 78 94 ...
$ V2 : Factor w/ 4 levels "0","30","5","TR27A1": 4 2 2 3 3 3 3 1 1 1 ...
$ V3 : Factor w/ 4 levels "0","30","5","TR27A2": 4 1 2 3 1 1 2 1 1 1 ...
$ V4 : Factor w/ 4 levels "0","5","75","TR27A3": 4 1 1 1 2 1 1 2 3 1 ...
$ V5 : Factor w/ 4 levels "0","5","75","TR27A4": 4 1 1 1 1 1 1 1 3 2 ...
$ V6 : Factor w/ 4 levels "0","30","5","TR27A5": 4 1 1 1 1 1 1 1 3 1 ...
$ V7 : Factor w/ 4 levels "0","5","75","TR27A6": 4 1 1 1 1 1 1 1 3 1 ...
$ V8 : Factor w/ 5 levels "0","30","5","75",..: 5 1 1 1 1 1 2 1 4 1 ...
$ V9 : Factor w/ 5 levels "0","30","5","75",..: 5 1 1 1 1 1 2 1 4 1 ...
$ V10: Factor w/ 4 levels "0","30","5","TR27B1": 4 2 3 3 3 3 3 1 3 1 ...
$ V11: Factor w/ 4 levels "0","30","5","TR27B2": 4 1 2 3 1 1 2 1 3 1 ...
$ V12: Factor w/ 4 levels "0","30","5","TR27B3": 4 1 1 1 3 1 1 3 2 3 ...
$ V13: Factor w/ 4 levels "0","5","75","TR27B4": 4 2 1 1 2 1 1 2 3 2 ...
$ V14: Factor w/ 5 levels "0","30","5","75",..: 5 1 1 1 1 1 1 3 2 1 ...
$ V15: Factor w/ 5 levels "0","30","5","75",..: 5 1 1 1 1 1 3 3 4 1 ...
$ V16: Factor w/ 4 levels "0","30","5","TR27B7": 4 1 1 1 1 1 2 1 2 1 ...
$ V17: Factor w/ 4 levels "0","30","5","TR27B8": 4 1 1 1 1 1 2 3 2 1 ...
$ V18: Factor w/ 4 levels "0","30","5","TR27C1": 4 3 2 3 3 3 3 3 2 1 ...
$ V19: Factor w/ 5 levels "0","30","5","75",..: 5 3 1 1 3 1 2 3 4 3 ...
$ V20: Factor w/ 5 levels "0","30","5","75",..: 5 3 1 1 1 1 3 3 4 1 ...
>

Ich möchte außerdem die Bezeichnung der Reihennamen ändern, also statt V1, V2 usw. die Bezeichnungen der ersten Zeile übernehmen. Wenn ich folgenden code nutze, kommt immer die Fehlermeldung "doppelte row.names" sind nicht zulässig". Wo ist der Fehler?

Code: Alles auswählen
[code]drygrassland<-read.table("drygrassland_main.txt",header=T,row.names = 1)[/code]

Re: Mittlere Artenzahl berechnen (Mittelwert)

BeitragVerfasst: Sa 13. Jul 2019, 11:58
von krissie
jogo hat geschrieben:Hallo Krissie,

das sieht so aus, als wenn beim Einlesen der Daten etwas schief gelaufen ist.
Kannst Du bitte mal den Output von
Code: Alles auswählen
str(drygrassland_ohne_D[, 1:20])
in Deine nächste Nachricht kopieren?

Gruß, Jörg

Re: Mittlere Artenzahl berechnen (Mittelwert)

BeitragVerfasst: Mo 15. Jul 2019, 09:14
von jogo
Hallo Krissie,

versuch mal:
Code: Alles auswählen
drygrassland<-read.table("drygrassland_main.txt", skip=1,header=TRUE, row.names = 1)

Es scheint oberhalb der Kopfzeile noch eine weitere zu geben. Mit skip=1 kannst Du diese überspringen.
Bitte kontrolliere anschließend wieder die Struktur des Dataframes.
Wenn Spalten als Factor angezeigt werden, die eigentlich numerische Werte enthalten sollten, ist etwas schief gegangen.

Gruß, Jörg

Re: Mittlere Artenzahl berechnen (Mittelwert)

BeitragVerfasst: Mo 15. Jul 2019, 13:19
von krissie
jogo hat geschrieben:Hallo Krissie,

versuch mal:
Code: Alles auswählen
drygrassland<-read.table("drygrassland_main.txt", skip=1,header=TRUE, row.names = 1)

Es scheint oberhalb der Kopfzeile noch eine weitere zu geben. Mit skip=1 kannst Du diese überspringen.
Bitte kontrolliere anschließend wieder die Struktur des Dataframes.
Wenn Spalten als Factor angezeigt werden, die eigentlich numerische Werte enthalten sollten, ist etwas schief gegangen.

Gruß, Jörg


Danke! Die row names haben nun geklappt ;)

Hier ist nochmal die Datenstruktur. Sind die Werte jetzt numerisch? Und was bedeutet die zweite Zeile?

data.frame': 207 obs. of 553 variables:
$ species : Factor w/ 204 levels "Achillea_millefolium_agg_",..: 49 79 84 130 165 171 120 78 94 101 ...
$ TR27A1 : int 30 30 5 5 5 5 0 0 0 0 ...
$ TR27A2 : int 0 30 5 0 0 30 0 0 0 0 ...
$ TR27A3 : int 0 0 0 5 0 0 5 75 0 0 ...
$ TR27A4 : int 0 0 0 0 0 0 0 75 5 5 ...
$ TR27A5 : int 0 0 0 0 0 0 0 5 0 0 ...
$ TR27A6 : int 0 0 0 0 0 0 0 75 0 0 ...
$ TR27A7 : int 0 0 0 0 0 30 0 75 0 0 ...
$ TR27A8 : int 0 0 0 0 0 30 0 75 0 0 ...
$ TR27B1 : int 30 5 5 5 5 5 0 5 0 0 ...
$ TR27B2 : int 0 30 5 0 0 30 0 5 0 5 ...
$ TR27B3 : int 0 0 0 5 0 0 5 30 5 0 ...
$ TR27B4 : int 5 0 0 5 0 0 5 75 5 5 ...
$ TR27B5 : int 0 0 0 0 0 0 5 30 0 0 ...
$ TR27B6 : int 0 0 0 0 0 5 5 75 0 0 ...
$ TR27B7 : int 0 0 0 0 0 30 0 30 0 0 ...
$ TR27B8 : int 0 0 0 0 0 30 5 30 0 0 ...
$ TR27C1 : int 5 30 5 5 5 5 5 30 0 0 ...
$ TR27C2 : int 5 0 0 5 0 30 5 75 5 5 ...
$ TR27C3 : int 5 0 0 0 0 5 5 75 0 0 ...
$ TR27C4 : int 5 0 0 5 0 30 5 30 0 0 ...
$ TR27E : int 30 5 5 5 5 30 30 75 5 5 ...

Re: Mittlere Artenzahl berechnen (Mittelwert)

BeitragVerfasst: Mo 15. Jul 2019, 13:44
von jogo
krissie hat geschrieben:Danke! Die row names haben nun geklappt ;)

Hier ist nochmal die Datenstruktur. Sind die Werte jetzt numerisch? Und was bedeutet die zweite Zeile?

data.frame': 207 obs. of 553 variables:
$ species : Factor w/ 204 levels "Achillea_millefolium_agg_",..: 49 79 84 130 165 171 120 78 94 101 ...
$ TR27A1 : int 30 30 5 5 5 5 0 0 0 0 ...
$ TR27A2 : int 0 30 5 0 0 30 0 0 0 0 ...
$ TR27A3 : int 0 0 0 5 0 0 5 75 0 0 ...
$ TR27A4 : int 0 0 0 0 0 0 0 75 5 5 ...
$ TR27A5 : int 0 0 0 0 0 0 0 5 0 0 ...
$ TR27A6 : int 0 0 0 0 0 0 0 75 0 0 ...
$ TR27A7 : int 0 0 0 0 0 30 0 75 0 0 ...
$ TR27A8 : int 0 0 0 0 0 30 0 75 0 0 ...
...
$ TR27E : int 30 5 5 5 5 30 30 75 5 5 ...

ja, int steht für integer. Du meinst die Zeile mit $species :?:
Wenn Du das nicht möchtest, musst Du so einlesen:
Code: Alles auswählen
drygrassland<-read.table("drygrassland_main.txt", skip=1, header=TRUE, row.names = 1, stringsAsFactors=FALSE)

Für die Anzahl der Arten je Spalte:
Code: Alles auswählen
sapply(drygrassland[-1], function(x) sum(x>0))

Und dann war ja noch:
und dann den Mittelwert von bestimmten Spaltenabschnitten: Also der Mittelwert nur von den Spalten A1 bis A8 (V2 bis V9), dann nur von B1 bis B8 (V10 bis V17)

Dafür müsstest Du mal kundtun, wie Du es bei der Mittelwertbildung mit den Nullen handhaben möchtest:
a) die Nullen sollen normal einbezogen werden (mean(c(3, 0, 1, 0)) ergibt 1),
b) die Nullen bedeuten NA und sollen nicht berücksichtigt werden; mean(c(3, NA, 1, NA), na.rm=TRUE) ergibt 2

Gruß, Jörg

Re: Mittlere Artenzahl berechnen (Mittelwert)

BeitragVerfasst: Mi 17. Jul 2019, 14:02
von krissie
jogo hat geschrieben:
krissie hat geschrieben:Danke! Die row names haben nun geklappt ;)

Hier ist nochmal die Datenstruktur. Sind die Werte jetzt numerisch? Und was bedeutet die zweite Zeile?

data.frame': 207 obs. of 553 variables:
$ species : Factor w/ 204 levels "Achillea_millefolium_agg_",..: 49 79 84 130 165 171 120 78 94 101 ...
$ TR27A1 : int 30 30 5 5 5 5 0 0 0 0 ...
$ TR27A2 : int 0 30 5 0 0 30 0 0 0 0 ...
$ TR27A3 : int 0 0 0 5 0 0 5 75 0 0 ...
$ TR27A4 : int 0 0 0 0 0 0 0 75 5 5 ...
$ TR27A5 : int 0 0 0 0 0 0 0 5 0 0 ...
$ TR27A6 : int 0 0 0 0 0 0 0 75 0 0 ...
$ TR27A7 : int 0 0 0 0 0 30 0 75 0 0 ...
$ TR27A8 : int 0 0 0 0 0 30 0 75 0 0 ...
...
$ TR27E : int 30 5 5 5 5 30 30 75 5 5 ...

ja, int steht für integer. Du meinst die Zeile mit $species :?:
Wenn Du das nicht möchtest, musst Du so einlesen:
Code: Alles auswählen
drygrassland<-read.table("drygrassland_main.txt", skip=1, header=TRUE, row.names = 1, stringsAsFactors=FALSE)

Für die Anzahl der Arten je Spalte:
Code: Alles auswählen
sapply(drygrassland[-1], function(x) sum(x>0))

Und dann war ja noch:
und dann den Mittelwert von bestimmten Spaltenabschnitten: Also der Mittelwert nur von den Spalten A1 bis A8 (V2 bis V9), dann nur von B1 bis B8 (V10 bis V17)

Dafür müsstest Du mal kundtun, wie Du es bei der Mittelwertbildung mit den Nullen handhaben möchtest:
a) die Nullen sollen normal einbezogen werden (mean(c(3, 0, 1, 0)) ergibt 1),
b) die Nullen bedeuten NA und sollen nicht berücksichtigt werden; mean(c(3, NA, 1, NA), na.rm=TRUE) ergibt 2

Gruß, Jörg


Super, die Artenzahl hat auch geklappt!

Genau, jetzt bräuchte ich nur noch die Mittelwerte von bestimmten Artenzahlabschnitten. Im Screenshot hab ich nun nur die Artenzahlen. Nullen sind hier keine mehr. Wie kann ich den Mittelwert von TR27A1 bis TR27A8, und TR27B1 bis TR27B8, und TR27C1 bis TR27C4 usw. bilden? Der Datensatz erstreckt sich mit diesem Muster über 533 Spalten...

Re: Mittlere Artenzahl berechnen (Mittelwert)

BeitragVerfasst: Mi 17. Jul 2019, 17:48
von jogo
krissie hat geschrieben:Super, die Artenzahl hat auch geklappt!
sehr schön.

Genau, jetzt bräuchte ich nur noch die Mittelwerte von bestimmten Artenzahlabschnitten. Im Screenshot hab ich nun nur die Artenzahlen. Nullen sind hier keine mehr. Wie kann ich den Mittelwert von TR27A1 bis TR27A8, und TR27B1 bis TR27B8, und TR27C1 bis TR27C4 usw. bilden? Der Datensatz erstreckt sich mit diesem Muster über 533 Spalten...
Und genau hierfür solltest Du schreiben, wie mit den Nullen umgegangen werden soll, denn es macht einen Unterschied.

Code: Alles auswählen
M <- matrix(as.matrix(drygrassland[-1]), 8*nrow(drygrassland))
# entweder
colMeans(M)
# oder:
M[M==0] <- NA
colMeans(M, na.rm=TRUE)


Gruß, Jörg

Re: Mittlere Artenzahl berechnen (Mittelwert)

BeitragVerfasst: Do 18. Jul 2019, 21:20
von krissie
Und genau hierfür solltest Du schreiben, wie mit den Nullen umgegangen werden soll, denn es macht einen Unterschied.

Code: Alles auswählen
M <- matrix(as.matrix(drygrassland[-1]), 8*nrow(drygrassland))
# entweder
colMeans(M)
# oder:
M[M==0] <- NA
colMeans(M, na.rm=TRUE)



Ok verstehe! Die Nullen sollen nicht berücksichtigt werden. Es ist allerdings so, dass ich nicht den Mittelwert aller 8 Reihen benötige, sondern folgendes Muster setzt sich fort (sorry, hätte ich erwähnen müssen):

8 Reihen, 8 Reihen, 4 Reihen, 1 Reihe, 8 Reihen, 8 Reihen, 4 Reihen, 1 Reihe usw.

Geht das auch irgendwie?

Ich danke dir vielmals für deine Antworten!!