Mehrere Funktionen in einem einzigen tapply oder aggregate-Anweisung
Ist es möglich, zwei Funktionen in einem einzigen tapply oder aggregate-Anweisung?
Unten habe ich zwei tapply Aussagen und zwei zusammengefasste Aussagen: eine für mittlere und eine für SD.
Ich würde es bevorzugen, kombinieren Sie die Anweisungen.
my.Data = read.table(text = "
animal age sex weight
1 adult female 100
2 young male 75
3 adult male 90
4 adult female 95
5 young female 80
", sep = "", header = TRUE)
with(my.Data, tapply(weight, list(age, sex), function(x) {mean(x)}))
with(my.Data, tapply(weight, list(age, sex), function(x) {sd(x) }))
with(my.Data, aggregate(weight ~ age + sex, FUN = mean)
with(my.Data, aggregate(weight ~ age + sex, FUN = sd)
# this does not work:
with(my.Data, tapply(weight, list(age, sex), function(x) {mean(x) ; sd(x)}))
# I would also prefer that the output be formatted something similar to that
# show below. `aggregate` formats the output perfectly. I just cannot figure
# out how to implement two functions in one statement.
age sex mean sd
adult female 97.5 3.535534
adult male 90 NA
young female 80.0 NA
young male 75 NA
Ich kann immer führen Sie zwei separate Anweisungen, und führen Sie die Ausgabe. Ich habe nur gehofft, es könnte
eine etwas mehr bequeme Lösung.
Fand ich die Antwort weiter unten gepostet hier: Übernehmen mehrere Funktionen zum Spalte mit tapply
f <- function(x) c(mean(x), sd(x))
do.call( rbind, with(my.Data, tapply(weight, list(age, sex), f)) )
Jedoch weder die Zeilen oder Spalten sind beschriftet.
[,1] [,2]
[1,] 97.5 3.535534
[2,] 80.0 NA
[3,] 90.0 NA
[4,] 75.0 NA
Ich würde lieber eine Lösung in der Basis R. Eine Lösung aus der plyr
Paket gepostet wurde unter dem link oben. Wenn ich die richtigen Zeilen-und Spaltenüberschriften, um die Ausgabe oben, wäre es perfekt.
InformationsquelleAutor der Frage Mark Miller | 2013-03-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aber diese haben sollte:
Den Grundsatz zu beachten ist, um Ihre Funktion return "eine Sache", die entweder einen Vektor oder eine Liste, aber nicht die aufeinander folgenden Aufruf der Funktion zwei Anrufe.
InformationsquelleAutor der Antwort 42-
Wenn Sie möchten, um die Daten verwenden.Tabelle, es hat
with
undby
rechts eingebaut:Ich verwendet eine leicht unterschiedliche Daten so eingestellt, dass Sie nicht haben
NA
Werte für sdInformationsquelleAutor der Antwort Ricardo Saporta
In den Geist des Teilens, wenn Sie mit SQL vertraut sindSie könnten auch erwägen die "sqldf" - Paket. (Hervorhebung Hinzugefügt, weil Sie brauchen, um wissen zum Beispiel, dass
mean
istavg
um die Ergebnisse, die Sie wollen.)InformationsquelleAutor der Antwort A5C1D2H2I1M1N2O1R2T1
Umformen lässt Sie passieren 2 Funktionen; reshape2 nicht.
Ich schuldig @Ramnath, die darauf hingewiesen diese erst gestern.
InformationsquelleAutor der Antwort Jack Ryan