R:用于使用来自一个df的搜索关键字来识别第二个df中的值的功能

时间:2016-02-16 00:49:29

标签: r lapply

我需要使用search_key中的三列中列出的产品代码:

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'))

我可以使用哪些功能系统地使用product_list中的代码搜索search_key,以便在final_list中识别并创建“产品”列?提前谢谢!

1 个答案:

答案 0 :(得分:3)

这是给你的一种方式。看到你的最终结果,我想你想重新安排product_list。我使用melt()并以长格式转换了您的数据。然后,使用search_keycode合并。最后一步由spread()包中的tidyr完成;该函数将长格式数据转换为宽格式数据。

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>