2014-04-09 14 views
11

tôi có thể tóm tắt một khung dữ liệu với dplyr như thế này:dplyr đến lớp đầu ra data.frame

mtcars %.% 
group_by(cyl) %.% 
summarise(mean(mpg)) 

Để chuyển đổi sản lượng trở lại lớp data.frame, cách tiếp cận hiện tại của tôi là thế này:

as.data.frame(mtcars %.% 
group_by(cyl) %.% 
summarise(mean(mpg))) 

Có cách nào để lấy dplyr để xuất ra một lớp data.frame mà không cần phải sử dụng as.data.frame?

+0

Quấn cuộc gọi của bạn đầu tiên trong 'str':' Lớp 'tbl_df', 'tbl' và 'dữ liệu .frame'' hoặc 'is.data.frame':' [1] TRUE'. – Henrik

+0

điều gì về ddply trong gói plyr? Tôi tin rằng đây là mục đích của nó –

+0

@Arun Tôi thường xuyên tìm thấy bản thân mình chuyển đổi trở lại một khung dữ liệu để thoát khỏi hành vi in ​​cực kỳ khó chịu (ít nhất là với tôi) (ngăn chặn cột) tại bàn điều khiển. – joran

Trả lời

16

Như đã được chỉ ra trong các nhận xét bạn có thể không cần phải chuyển đổi vì nó có thể đủ tốt để nó kế thừa từ khung dữ liệu. Nếu điều đó là không đủ tốt thì đây vẫn sử dụng as.data.frame nhưng là hơi tao nhã hơn:

mtcars %>% 
    group_by(cyl) %>% 
    summarise(mean(mpg)) %>% 
    as.data.frame() 

THÊM Tôi chỉ đọc trong các ý kiến ​​rằng lý do bạn muốn điều này là để tránh cắt ngắn sản lượng in. Trong trường hợp đó chỉ là xác định tùy chọn này, có thể trong tập tin .Rprofile của bạn:

options(dplyr.print_max = Inf) 

(Lưu ý rằng bạn vẫn có thể đạt mức tối đa quy định của "max.print" tùy chọn liên quan đến in, do đó bạn sẽ cần phải thiết lập một quá nếu nó cũng quá thấp cho bạn.)

Cập nhật: Thay đổi %.% thành %>% để phản ánh các thay đổi trong dplyr.

1

Ngoài những gì G. Grothendieck đề cập ở trên, bạn có thể chuyển đổi nó thành một dataframe mới:

new_summary <- mtcars %>% 
    group_by(cyl) %>% 
    summarise(mean(mpg)) %>% 
    as.data.frame() 
Các vấn đề liên quan