2016-02-16 50 views
1

我需要使用從search_key分三路列出的產品代碼,以確定值:R:函數以使用搜索鍵從一個DF中的第二DF

search_key <- data.frame('product' = c('Apple', 'Apple', 'Apple', 'Banana', 
             'Banana', 'Banana', 'Mango', 'Mango'), 
         'code' = c('123','000','232', '567', '222', '434', 
            '999', '909')) 

確定具體產品在product_list

product_list <- data.frame('code_1' = c('123','567','999'), 
          'code_2' = c('000', '222', NA), 
          'code_3' = c('232', NA, NA), 
          'price' = c('1.29', '2.29', '3.24')) 

產生的final_list的最終結果:

final_list <- data.frame('code_1' = c('123','567','999'), 
          'code_2' = c('000', '222', NA), 
          'code_3' = c('232', NA, NA), 
          'price' = c('1.29', '2.29', '3.24'), 
          'product' = c('Apple', 'Banana', 'Mango')) 

我可以使用什麼函數系統地使用search_key的代碼來搜索product_list,以確定並創建final_list中的「產品」列?提前致謝!

+1

這只是一個合併操作。 'merge(product_list,search_key,by = paste0(「code _」,1:3))''我可以建議看一下像http://www.statmethods.net/management/merging.html這樣的網站,基礎知識下拍? – thelatemail

+2

假設你需要'search_key'中每行的一個輸出行,那麼這將執行所有常見列名的查找:'merge(search_key,product_list,all.x = TRUE)' –

+0

您可以從這裏開始搜索:http:/ /stackoverflow.com/search?q=[r]+merge+data.frame –

回答

3

這是您的一種方式。看到你的最終結果,我想你想重新排列product_list。我使用了melt()並以長格式轉換您的數據。然後,與search_key合併code。最後一步是在包中的spread();該功能將長格式數據轉換爲寬格式數據。

library(magrittr) 
library(reshape2) 
library(tidyr) 

melt(product_list, id.var = "price", value.name = "code") %>% 
merge(search_key, by = "code") %>% 
spread(key = "variable", value = "code") 

# product price code_1 code_2 code_3 
#1 Apple 1.29 123 000 232 
#2 Banana 2.29 567 222 <NA> 
#3 Mango 3.24 999 <NA> <NA> 
+1

此外,正如您使用過'tidyr','collect(product_list,variable,code,-price)%>%inner_join(。,search_key,by =「code」)%>%spread(變量,代碼)' – akrun

+1

@ akrun是的。您可以堅持所有操作的dplyr和tidyr。像往常一樣感謝你的提示。 :) – jazzurro

+1

謝謝@jazzurro,融合函數效果很好,如果我將兩個DF列表都轉換成明智的話,合併就可行! – Austin

相關問題