2013-04-10 28 views
13

Xin chào và cảm ơn trước sự hỗ trợ của bạn,Lập trình R - Phần tử tổng số hàng có giá trị chung

(XIN LƯU Ý Phần chi tiết trong ví dụ bên dưới đã được thêm vào câu hỏi này; Simon, cung cấp một câu trả lời tuyệt vời, nhưng cột chi phí chính nó không được đại diện trong phản hồi dữ liệu từ ông, mặc dù chức năng ông cung cấp công trình với cột chi phí)

Tôi có một tập dữ liệu, gọi nó là 'dữ liệu' trông giống như thế này

NAME  DATE  COLOR PAID COST 
Jim  1/1/2013 GREEN 150  100 
Jim  1/2/2013 GREEN 50  25 
Joe  1/1/2013 GREEN 200  150 
Joe  1/2/2013 GREEN 25  10 

Những gì tôi muốn làm là tổng các thành phần PAID (và COST) của các bản ghi có cùng giá trị NAME và giảm số hàng (như trong ví dụ này) xuống 2, sao cho khung dữ liệu mới của tôi trông như sau:

NAME  DATE  COLOR PAID COST 
Jim  1/2/2013 GREEN 200  125 
Joe  1/2/2013 GREEN 225  160 

Theo như ngày tháng có liên quan, tôi không thực sự quan tâm đến điều nào tồn tại trong quá trình tổng kết.

Tôi đã nhận được như xa như rowSums (dữ liệu), nhưng tôi không chắc chắn chính xác cách sử dụng nó. Mọi sự trợ giúp sẽ rất được trân trọng.

Trả lời

21

aggregate là chức năng bạn đang tìm kiếm:

aggregate(cbind(PAID , COST) ~ NAME + COLOR , data = data , FUN = sum) 
# NAME PAID 
# 1 Jim 200 
# 2 Joe 225 
+0

Cảm ơn bạn Simon. Tôi rất trân trọng điều này. Tôi đã tự hỏi nếu có bất kỳ cách nào để giữ lại trường "COLOR" với mỗi hàng trong tổng hợp. –

+0

Chắc chắn, tôi sẽ cập nhật câu trả lời. Tất cả các trường màu của bạn có giống nhau cho mỗi người không? Nếu bạn không muốn phổ biến nhất? –

+0

Vì vậy, đối với mỗi người, tất cả các màu của họ sẽ vẫn không đổi thông qua các hồ sơ. Ví dụ: Jim sẽ luôn có Màu xanh lá cây và Joe có thể có màu đỏ, nhưng bản ghi của Joe sẽ luôn có màu đỏ. Một khía cạnh cuối cùng của câu hỏi này. Nếu tôi có trường dữ liệu số khác ngoài PAID (tức là COST), tôi có thể tổng hợp trường đó theo cách như thế nào? Cảm ơn bạn rất nhiều. –