Ich habe eine große Datentabelle (aus dem Paket data.table) mit über 60 Spalten (die ersten drei entsprechen den Faktoren und die restlichen Antwortvariablen, in diesem Fall verschiedene Arten) und mehrere Reihen, die den verschiedenen Ebenen der Behandlungen und den Artenhäufigkeiten entsprechen. Eine sehr kleine Version sieht wie folgt aus:Summierung über Zeilen einer data.table für spezifische Spalten
library(data.table)
TEST <- data.table(Time=c("0","0","0","7","7","7","12"),
Zone=c("1","1","0","1","0","0","1"),
quadrat=c(1,2,3,1,2,3,1),
Sp1=c(0,4,29,9,1,2,10),
Sp2=c(20,17,11,15,32,15,10),
Sp3=c(1,0,1,1,1,1,0))
setkey(TEST,Time)
TEST
# Time Zone quadrat Sp1 Sp2 Sp3
# 1: 0 1 1 0 20 1
# 2: 0 1 2 4 17 0
# 3: 0 0 3 29 11 1
# 4: 12 1 1 10 10 0
# 5: 7 1 1 9 15 1
# 6: 7 0 2 1 32 1
# 7: 7 0 3 2 15 1
ich zuerst die mittlere Häufigkeit der einzelnen Arten über die Zeit berechnet werden soll für jede Zone Quadrates Kombination x und das ist in Ordnung:
Abundance = TEST[ , lapply(.SD, mean), by = "Zone,quadrat"]
Abundance
# Zone quadrat Time Sp1 Sp2 Sp3
# 1: Z1 1 NA 6.333333 15.0 0.6666667
# 2: Z1 2 NA 2.500000 24.5 0.5000000
# 3: Z0 1 NA 15.500000 13.0 1.0000000
Dann möchte ich Berechnen Sie die Zeilensumme für die Spalten "Spezies", im Beispiel von Sp1 bis Sp3. Ich habe den folgenden Code ohne Erfolg versucht:
Abundance$SumAbundance <- rowSums(Abundance[ , c(4:6)])
erhalte ich die Fehlermeldung:
# Error in rowSums(Abundance[, c(4:6)]) :
# 'x' must be an array of at least two dimensions
Wie kann ich Zeilensummen für bestimmte Spalten eines data.table
berechnen?
Hallo @eddi, das ist toll, es funktioniert. Können Sie erklären, warum die ursprüngliche Version (Abundance [, c (4: 6)]) das getan hat? –
@ClaireG siehe Punkt '1.1' in der [FAQ] (http://datatable.r-forge.r-project.org/datatable-faq.pdf) – eddi
@eddi, wie man umgeht, wenn einige der Werte sind NA und du willst sie in der reduzierten Version loswerden –