是否可以在单个 tapply 或聚合语句中包含两个函数?
下面我使用两个 tapply 语句和两个聚合语句:一个用于均值,一个用于 SD。
我更愿意合并这些陈述。
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
我总是可以运行两个单独的语句并合并输出。我只是希望可能有一个更方便的解决方案。
我在这里找到了下面的答案: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)) )
但是,行或列都没有标记。
[,1] [,2]
[1,] 97.5 3.535534
[2,] 80.0 NA
[3,] 90.0 NA
[4,] 75.0 NA
我更喜欢 base R 中的解决方案。plyr
包中的解决方案已发布在上面的链接中。如果我可以在上面的输出中添加正确的行和列标题,那将是完美的。