2015-08-18 14 views
18

Làm cách nào để kết hợp nhiều khung dữ liệu trong R bằng cách sử dụng dplyr?Cách thực hiện nhiều phép nối trái bằng dplyr trong R

new <- left_join(x,y, by = "Flag") 

này là mã Tôi đang sử dụng sang trái tham gia x và y mã không làm việc cho nhiều gia nhập

new <- left_join(x,y,z by = "Flag") 
+1

[Đây là cách bạn tham gia nhiều bộ dữ liệu trong R] (http://stackoverflow.com/questions/8091303/simultaneously-merge-multiple-data-frames-in-a-list) thường. Bạn có thể sử dụng 'left_join' thay vì' merge' nếu muốn. –

+1

Sử dụng 'Reduce (function (dtf1, dtf2) left_join (dtf1, dtf2, by =" index "), danh sách (x, y, z))'. Vì câu hỏi này được đánh dấu là trùng lặp, tôi đã đưa ra một câu trả lời chi tiết với ví dụ về câu hỏi [Đồng thời hợp nhất nhiều dữ liệu.frames trong một danh sách] (http://stackoverflow.com/a/34393416/2641825). –

Trả lời

36

Bạn có thể sử dụng lồng nhau left_join

left_join(x, y, by='Flag') %>% 
       left_join(., z, by='Flag') 

Hoặc một tùy chọn khác sẽ đặt tất cả các tập dữ liệu vào một số list và sử dụng merge từ base R với Reduce

Reduce(function(...) merge(..., by='Flag', all.x=TRUE), list(x,y,z)) 

Hoặc chúng tôi có join_all từ plyr. Ở đây cũng có, chúng tôi đặt các khung dữ liệu trong một list và sử dụng đối số type='left' để tham gia trái.

library(plyr) 
join_all(list(x,y,z), by='Flag', type='left') 
+5

Tôi đoán bạn chỉ có thể nhúng 'left_join' vào' Reduce' quá, nhưng có vẻ như điều này đã được hỏi vài lần ngày hôm qua, phải không? –

+0

@DavidArenburg Có, nó có thể hữu ích và hữu ích cho nhiều tập dữ liệu. Tôi chỉ nghĩ sử dụng '%>%'. – akrun

+1

Các tùy chọn đường ống và giảm với join_left nhanh hơn nhiều (1.8s) (~ 10x nhanh hơn trong trường hợp của tôi-có điều kiện để dữ liệu của bạn tất nhiên vv ..). Giảm với hợp nhất là rất chậm (16s) nhưng nếu bạn thay thế hợp nhất với left_join sau đó bạn có tốc độ tương đương như với đường ống (wee bit chậm hơn 1.9s trên trung bình nhưng không đáng kể). Điểm chậm nhất là join_all từ plyr (22s). –

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