2015-04-23 13 views
5

Tôi đã gặp sự cố hôm nay để tìm cách tập hợp số dplyr trong R nhưng vì một số lý do không thể đưa ra giải pháp (mặc dù tôi nghĩ rằng điều này nên khá dễ dàng).Nhiều tập hợp (phân loại và số) với dplyr trong một chuỗi

Tôi có một tập hợp dữ liệu như thế này:

structure(list(date = structure(c(16431, 16431, 16431, 16432, 
16432, 16432, 16433, 16433, 16433), class = "Date"), colour = structure(c(3L, 
1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L), .Label = c("blue", "green", 
"red"), class = "factor"), shape = structure(c(2L, 2L, 3L, 3L, 
3L, 2L, 1L, 1L, 1L), .Label = c("circle", "square", "triangle" 
), class = "factor"), value = c(100, 130, 100, 180, 125, 190, 
120, 100, 140)), .Names = c("date", "colour", "shape", "value" 
), row.names = c(NA, -9L), class = "data.frame") 

trong đó cho thấy như thế này:

 date colour shape value 
1 2014-12-27 red square 100 
2 2014-12-27 blue square 130 
3 2014-12-27 blue triangle 100 
4 2014-12-28 green triangle 180 
5 2014-12-28 green triangle 125 
6 2014-12-28 red square 190 
7 2014-12-29 red circle 120 
8 2014-12-29 blue circle 100 
9 2014-12-29 blue circle 140 

Mục tiêu của tôi là để tính toán màu sắc thường gặp nhất, hình dáng và giá trị trung bình mỗi ngày. sản lượng dự kiến ​​của tôi là như sau:

 date colour shape value 
1 27/12/2014 blue square 110 
2 28/12/2014 green triangle 165 
3 29/12/2014 blue circle 120 

tôi đã kết thúc làm việc đó bằng split và viết chức năng riêng của tôi để tính toán ở trên cho một data.frame, sau đó sử dụng snow::clusterApply để chạy nó song song. Đó là đủ hiệu quả (tập dữ liệu ban đầu của tôi dài khoảng 10M hàng) nhưng tôi tự hỏi liệu điều này có thể xảy ra trong một chuỗi sử dụng dplyr. Hiệu quả là thực sự quan trọng cho việc này để có thể chạy nó trong một chuỗi là khá quan trọng.

+0

bạn đã thử sử dụng 'group_by' và 'summarize'? [Cách tiếp cận này] (http://stackoverflow.com/questions/18433647/how-to-get-the-most-frequent-level-of-a-categorical-variable-in-r) có thể đạt được cấp độ phổ biến nhất. –

Trả lời

7

Bạn có thể làm

dat %>% group_by(date) %>% 
    summarize(colour = names(which.max(table(colour))), 
       shape = names(which.max(table(shape))), 
       value = mean(value)) 
+0

Tôi biết tôi đã đi theo con đường dài bằng cách sử dụng 'split' +' clusterApply'! Cảm ơn rất nhiều! Đây là những gì tôi đang tìm kiếm và tôi đã nhầm lẫn với cách kết hợp các chức năng cần thiết với 'tóm tắt'. Cảm ơn một lần nữa !! – LyzandeR

+1

@LyzandeR rất sẵn lòng trợ giúp! –

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