Có thể bao gồm hai hàm trong một câu lệnh tapply hoặc tổng hợp duy nhất không?Nhiều chức năng trong một tuyên bố tapply hoặc tổng hợp đơn lẻ
Dưới đây tôi sử dụng hai câu lệnh tapply và hai câu lệnh tổng hợp: một cho giá trị trung bình và một cho SD.
Tôi muốn kết hợp các câu lệnh.
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
Tôi luôn có thể chạy hai câu lệnh riêng biệt và hợp nhất đầu ra. Tôi chỉ hy vọng có thể có một giải pháp thuận tiện hơn một chút.
Tôi tìm thấy câu trả lời dưới đây được đăng ở đây: 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)))
Tuy nhiên, không phải các hàng hoặc cột được dán nhãn.
[,1] [,2]
[1,] 97.5 3.535534
[2,] 80.0 NA
[3,] 90.0 NA
[4,] 75.0 NA
Tôi thích giải pháp trong cơ sở R. Một giải pháp từ gói plyr
đã được đăng tại liên kết ở trên. Nếu tôi có thể thêm các tiêu đề hàng và cột chính xác vào đầu ra ở trên, nó sẽ là hoàn hảo.
Cảm ơn bạn! Hai báo cáo tổng hợp hoạt động. Tuyên bố tapply dường như không hoạt động, nhưng tôi có thể sử dụng cách tiếp cận tổng hợp. –
Vâng, tôi nghĩ rằng nó "hoạt động", chỉ cần không cung cấp cho bạn một cái gì đó mà in độc đáo. Hãy thử 'với (my.Data, tapply (trọng số, danh sách (tuổi, giới tính), hàm (x) {c (trung bình (x), sd (x))})) [1,1]' và chơi với các chỉ số để xem bên trong ma trận danh sách đó. –
Tôi hiểu. Cảm ơn bạn. Và nếu tôi đặt toàn bộ câu lệnh bên trong colnames() hoặc rownames() thì tôi sẽ nhận được các nhãn. –