我需要在R中執行順序合併,我的意思是讓我們說我有兩個數據集:訂單和交付。如何在R中基於多個列在兩個相同的數據集中進行順序合併
我想匹配這些訂單和交付在一起,但我首先想要基於地址列合併,然後對於不匹配的行,我想合併基於郵政編碼,然後對於這些行不匹配,我想基於經度和緯度進行合併,然後對於那些不匹配的行,我想合併其他屬性等等。
我可以很容易做到基於一個屬性,像這樣的合併:
merge1 <- merge(orders, deliveries, by.x = c("order_date", "address"),
by.y = c("date", "delivery_address"), sort = FALSE)
但現在我要投其所好未通過假設有兩個不同的郵政編碼merge1匹配的行兩列中的名稱(一個數據集中的「郵政編碼」和另一箇中的「郵政編碼」)。
我試着在訂單上做一個左連接,然後找到對於merge1的deliveries數據集中的某個列返回NA的行,然後嘗試使用該子集進行另一次合併,但一直未能成功完成。
merge1 <- merge(orders, deliveries, by.x = c("order_date", "address"),
by.y = c("date", "delivery_address"), all.x = TRUE, sort = FALSE)
merge2 <- merge(merge1[is.na(merge1$delivery_address),], deliveries, by.x = c("order_date", "zipcode"),
by.y = c("date", "postcode"), all.x = TRUE, sort = FALSE)
我知道這是完全錯誤的,因爲它只返回NA值,它重複列,但這是我的思路。
基本上,只需要一種方法來在兩個數據集之間進行R的順序合併,首先是一列,然後是另一列,依此類推。儘管我不想要左連接,但只有匹配行被返回的內連接,但是,我可以執行左連接,然後在所有合併後,只選擇沒有NA的行。所以我的最終結果應該是所有與交付相匹配的訂單,但只有那些相應匹配的訂單。
編輯:
人們問一些示例數據,所以這裏是一些:
orders <- data.frame(order = c(1,2,3,4,5,6,7,8,9,10),
address = c(1111, 1112, 1314, 1113, 1114, 1618, 1917, 1118, 1945, 2000),
zipcode = c(001, 002, 001, 999, 999, 006, 007, 007, 999, 010))
deliveries <- data.frame(length = c(4, 5, 9, 11, 13, 15, 93, 17, 4, 8, 12),
delivery_address = c(1111, 1112, 0111, 1113, 1114, 0000, 1618, 0001, 0002, 0405, 1121),
postcode = c(001, 912, 001, 910, 913, 006, 080, 007, 074, 088, 010))
merge1 <- merge(orders, deliveries, by.x = "address", by.y = "delivery_address", sort = FALSE)
所以merge1正確給了我與交付是有相同的地址,現在怎麼匹配了訂單添加到merge1數據集並添加那些未與deliveryies數據集匹配的行,以便我可以通過郵編匹配它們,因爲仍然有一些訂單和郵遞可以通過郵政編碼匹配。
請出示基於該 – akrun
增加了一些示例數據 – Ic3MaN911
你能顯示出與貼出的例子您想要的結果的小重複的例子,和預期的輸出? – Parfait