2016-09-25 16 views
6
mtcars %>% select(mpg, cyl) %>% group_by(cyl) %>% arrange(mpg) %>% slice(8) 

raR chia áp dụng kết hợp với dplyr - làm thế nào để giữ cho NA do lát

mpg cyl 
    <dbl> <dbl> 
1 30.4  4 
2 15.2  8 

Như bạn có thể thấy, nó không tạo ra liên tiếp trong 6 xy lanh - cách khuyến khích để giữ những gì là tất cả các nhóm, ngay cả khi kết hợp trống?

+0

Tôi không chắc chắn nó là lý tưởng, nhưng 'mtcars%>% chọn (mpg, cyl)%>% nhóm_by (cyl)%>% sắp xếp (mpg)%>% tóm tắt (mpg = mpg [8])' hoạt động. – alistaire

+0

Câu hỏi hay. Có vẻ 'slice' được thiết kế để hoạt động không giống' [] 'ở đâu đó trong giải pháp của R. Alistaire là ổn cho đến khi bạn có nhiều cột hơn để làm việc, tại thời điểm đó bạn có thể muốn chuyển sang dữ liệu.table, với cú pháp như' DT [order (mpg), .SD [8L], bởi = cyl, .SDcols = "mpg"] '... vâng, tôi đoán có summaryise_each/summaryise_at, nhưng những thứ đó sẽ không mở rộng thành, ví dụ, chọn cả thứ bảy và hàng thứ tám. – Frank

+2

@Frank Bạn có thể khái quát dễ dàng với 'summaryise_all', ví dụ: 'mtcars%>% select (mpg, cyl)%>% group_by (cyl)%>% sắp xếp (mpg)%>% summaryise_all (funs (. [8]))' – alistaire

Trả lời

1

Để nhanh chóng chọn một hàng từ mỗi nhóm, giữ NA s, bạn có thể tập hợp con bên summarise_all:

mtcars %>% group_by(cyl) %>% 
    arrange(mpg) %>% 
    summarise_all(funs(.[8])) 

## # A tibble: 3 × 11 
##  cyl mpg disp hp drat wt qsec vs am gear carb 
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 
## 1  4 30.4 75.7 52 4.93 1.615 18.52  1  1  4  2 
## 2  6 NA NA NA NA NA NA NA NA NA NA 
## 3  8 15.2 304.0 150 3.15 3.435 17.30  0  0  3  2 

Tuy nhiên, @Frank là đúng trên; nó sẽ không mở rộng độc đáo để đặt dưới nhiều hàng theo định dạng này bởi vì summarise yêu cầu một hàng kết quả duy nhất cho mỗi nhóm. Để tập hợp con, nói, 7 và 8 hàng của từng nhóm, sử dụng một cột danh sách và unnest với tidyr::unnest:

library(tidyverse) 

mtcars %>% group_by(cyl) %>% 
    arrange(mpg) %>% 
    summarise_all(funs(list(.[7:8]))) %>% 
    unnest() 

## # A tibble: 6 × 11 
##  cyl mpg disp hp drat wt qsec vs am gear carb 
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 
## 1  4 27.3 79.0 66 4.08 1.935 18.90  1  1  4  1 
## 2  4 30.4 75.7 52 4.93 1.615 18.52  1  1  4  2 
## 3  6 21.4 258.0 110 3.08 3.215 19.44  1  0  3  1 
## 4  6 NA NA NA NA NA NA NA NA NA NA 
## 5  8 15.2 275.8 180 3.07 3.780 18.00  0  0  3  3 
## 6  8 15.2 304.0 150 3.15 3.435 17.30  0  0  3  2 

Một phiên bản ngắn gọn hơn với purrr::dmap lợi nhuận điều tương tự:

mtcars %>% group_by(cyl) %>% 
    arrange(mpg) %>% 
    dmap(~.x[7:8]) 
Các vấn đề liên quan