Czy jest możliwe uwzględnienie dwóch funkcji w pojedynczym oświadczeniu typu tapply lub aggregate?Wiele funkcji w pojedynczym tapply lub zbiorczym oświadczeniu
Poniżej używam dwóch oświadczeń w formie oświadczeń i dwóch stwierdzeń zbiorczych: jednej dla średniej i drugiej dla SD.
Wolałbym łączyć oświadczenia.
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
Zawsze mogę uruchomić dwie osobne instrukcje i połączyć dane wyjściowe. Miałem tylko nadzieję, że może być nieco wygodniejsze rozwiązanie.
znalazłem odpowiedź poniżej zamieszczone tutaj: Apply multiple functions to column using tapply
f <- function(x) c(mean(x), sd(x))
do.call(rbind, with(my.Data, tapply(weight, list(age, sex), f)))
Jednak ani wiersze lub kolumny są oznakowane.
[,1] [,2]
[1,] 97.5 3.535534
[2,] 80.0 NA
[3,] 90.0 NA
[4,] 75.0 NA
wolałbym rozwiązanie w bazie R. Rozwiązanie z pakietu plyr
został opublikowany w linku powyżej. Jeśli mogę dodać prawidłowe nagłówki wierszy i kolumn do powyższego wyniku, byłoby idealnie.
Dziękujemy! Dwie agregujące instrukcje działają. Wydaje się, że oświadczenie tapply nie działa, ale mogę użyć podejścia zbiorczego. –
Cóż, myślę, że to "działa", po prostu nie dać ci czegoś, co ładnie się drukuje. Spróbuj 'with (my.Data, tapply (waga, lista (wiek, płeć), funkcja (x) {c (średnia (x), sd (x))})) [1,1]' i baw się z wskaźniki, aby zobaczyć wewnątrz tej macierzy list. –
Rozumiem. Dziękuję Ci. A jeśli umieściłbym całe oświadczenie w colnames() lub rownames(), to otrzymam etykiety. –