2015-09-07 17 views
5

Tôi phải thiếu một cái gì đó với cách group_by cấp độ trong dplyr bị bóc. Trong ví dụ dưới đây, tôi nhóm theo 2 cột, tổng giá trị vào một biến duy nhất, sau đó sắp xếp bởi rằng biến mới:dplyr: Sắp xếp không hoạt động như mong đợi sau khi group_by và tóm tắt

mtcars %>% group_by(cyl, gear) %>% 
    summarize(hp_range = max(hp) - min(mpg)) %>% 
    arrange(desc(hp_range)) 

# Source: local data frame [8 x 3] 
# Groups: cyl [3] 
# 
# cyl gear hp_range 
# (dbl) (dbl) (dbl) 
#1  4  4 87.6 
#2  4  5 87.0 
#3  4  3 75.5 
#4  6  5 155.3 
#5  6  4 105.2 
#6  6  3 91.9 
#7  8  5 320.0 
#8  8  3 234.6 

Rõ ràng điều này là không được sắp xếp theo hp_range như dự định. Tôi đang thiếu gì?

EDIT: Ví dụ hoạt động như mong đợi mà không có cuộc gọi đến desc sắp xếp. Vẫn chưa rõ tại sao?

Trả lời

8

Ok, chỉ có xuống đáy này:

  1. Các cuộc gọi đến desc không có hiệu lực thi hành, đó là ngẫu nhiên mà ví dụ đã không làm việc mà không có nó
  2. Điều quan trọng là khi bạn group_by nhiều cột, có vẻ như kết quả được sắp xếp tự động theo Nhóm. Trong ví dụ trên, nó được sắp xếp theo cyl. Để có được loại đích của toàn bộ bảng dữ liệu, trước tiên bạn phải ungroup và sau đó arrange

    mtcars %>% group_by(cyl, gear) %>% 
        summarize(hp_range = max(hp) - min(mpg)) %>% 
        ungroup() %>% 
        arrange(hp_range) 
    
+0

Tôi chỉ muốn nói với bạn rằng tất cả các câu hỏi và câu trả lời của bạn cho đến nay trên trang web này đã được rất tốt. Giải thích rõ ràng cùng với các ví dụ tái sản xuất. Cảm ơn! –

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