2011-09-16 31 views

Trả lời

9

Chuyển đến giữa phần ví dụ về help(aggregate) và bạn sẽ thấy điều này:

## Formulas, one ~ one, one ~ many, many ~ one, and many ~ many: 
aggregate(weight ~ feed, data = chickwts, mean) 
aggregate(breaks ~ wool + tension, data = warpbreaks, mean) 
aggregate(cbind(Ozone, Temp) ~ Month, data = airquality, mean) 
aggregate(cbind(ncases, ncontrols) ~ alcgp + tobgp, data = esoph, sum) 

Bốn cuộc gọi khác nhau để aggregate(), tất cả sử dụng giao diện thức. Cách nó được viết trên những gì bạn trích dẫn đã làm với cơ chế phương pháp điều phối sử dụng trong suốt R.

xem xét ví dụ đầu tiên:

R> class(weight ~ feed) 
[1] "formula" 
R> class(chickwts) 
[1] "data.frame" 

công văn để tổng hợp vào nó đối số đầu tiên (của lớp formula). Cách một công thức được giải quyết trong R thường xoay quanh một model.matrix, tôi cho rằng một cái gì đó tương tự xảy ra ở đây và một cuộc gọi tương đương cuối cùng được thực thi bởi aggregate.data.frame, sử dụng đối số thứ hai chickwts, một data.frame.

R> aggregate(weight ~ feed, data = chickwts, mean) 
     feed weight 
1 casein 323.583 
2 horsebean 160.200 
3 linseed 218.750 
4 meatmeal 276.909 
5 soybean 246.429 
6 sunflower 328.917 
R> 

Điều bạn hỏi không phải là câu hỏi mới bắt đầu dễ dàng nhất, tôi khuyên bạn nên xem kỹ một số tài liệu và sách R phong nha nếu bạn có một cách tiện dụng. (Và khác SO câu hỏi đưa ra đề nghị như những gì để đọc tiếp theo.)

Edit: tôi đã phải đào một chút như aggregate.formula() không xuất khẩu từ stats namespace, nhưng bạn có thể nhìn vào nó bằng cách gõ stats:::aggregate.formula tại dấu nhắc - sau đó rõ ràng cho thấy rằng nó thực tế, gửi đến aggregate.data.frame():

[.... some code omitted ...] 
    if (is.matrix(mf[[1L]])) { 
     lhs <- as.data.frame(mf[[1L]]) 
     names(lhs) <- as.character(m[[2L]][[2L]])[-1L] 
     aggregate.data.frame(lhs, mf[-1L], FUN = FUN, ...) 
    } 
    else aggregate.data.frame(mf[1L], mf[-1L], FUN = FUN, ...) 
} 
<environment: namespace:stats> 
R> 
+4

Có cách nào để làm điều này mà không đặt tên tất cả các cột trong 'cbind()'? Đối với nhiều cột, tôi đoán tôi không hiểu tại sao người ta không thể làm 'tổng hợp (. ~ Var, ...)' hoặc tên <- c ("var1", "var2", ...) 'và sau đó 'tổng hợp (df [, tên] ~ var, ...)'. Hay điều này là không thể? – Hendy

Các vấn đề liên quan