2016-09-14 32 views
5

Tôi có một khung dữ liệu, trả về 2 nhóm cho cùng một phút. Làm thế nào nó có thể được xử lý để đạt được sản lượng dự kiến ​​của tôi?dplyr: Cách xử lý nhiều giá trị

df<- read.table(header=TRUE, 
       text=" 
       Company xxx yyyy zzzz cnt 
       abc  1  1 1  20 
       aaa  1  1 2  3 
       bbb  1  1 1  3 
       ddd  2  0 2  100 
       ") 

tôi đã cố gắng mã dưới đây

final= df %>% 
     group_by(xxx,yyyy) %>% 
     summarise(Topcomp=Company[c(which(min(cnt)==cnt))]) 

Im nhận:

Error: expecting a single value

Tôi muốn có đầu ra như dưới đây.

xxx yyyy Topcomp 
    <int> <int> <fctr> 
1  1  1 aaa,bbb 
2  2  0  ddd 
+0

Các giải pháp linh hoạt nhất là một cột danh sách , nghĩa là 'df%>% group_by (xxx, yyyy)%>% tóm tắt (Topcomp = list (Công ty [cnt == min (cnt)]))', mặc dù họ thực hiện một chút để làm việc. – alistaire

+0

Ngoài ra, bạn có thể cắt bỏ 'c' và' which' như tôi đã nhận xét dưới đây, vì chúng không làm gì ở đây cả. – alistaire

Trả lời

5

Bạn có thể sử dụng paste(..., collapse = ",")

df %>% 
    group_by(xxx,yyyy) %>% 
    summarise(Topcomp = paste(Company[min(cnt) == cnt], collapse = ",")) 
+0

Bạn có thể lấy ra 'c' và' which'. – alistaire

+0

Cảm ơn, nó đã hoạt động ... –

6

Bạn nên làm điều này:

final= df %>% 
    group_by(xxx,yyyy) %>% 
    summarise(Topcomp=toString(Company[c(which(min(cnt)==cnt))])) 
##Source: local data frame [2 x 3] 
##Groups: xxx [?] 
## 
## xxx yyyy Topcomp 
## <int> <int> <chr> 
##1  1  1 aaa, bbb 
##2  2  0  ddd 

Bạn đã nhận được lỗi vì which trở hai giá trị để tập hợp con của bạn của Company có hai giá trị khi summarise yêu cầu một giá trị duy nhất. Các toString là tương tự như paste với collapse="," ở chỗ nó thu gọn hai giá trị thành một chuỗi được phân tách bằng dấu phẩy.

Ngoài ra, như alistaire chỉ ra trong bình luận của ông cho câu trả lời khác, bạn không cần cwhich, vì vậy đây có thể được đơn giản hóa để:

final= df %>% 
    group_by(xxx,yyyy) %>% 
    summarise(Topcomp=toString(Company[min(cnt)==cnt])) 
+1

Cảm ơn nó đã hoạt động –

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