我有两张桌子 - Price_list
和order_list
。 price_list
表格为product_id
提供了所有商店中所有商店的日期活动价格。虽然order_list
给了我下订单的清单,即下订单的人以及从哪个商店下单。
Price_list - date,product_id,store_id,selling_price
order_list - date,product_id,store_id,selling_price,order_id,email,product_order_id(唯一键 - product_id和order_id的连接,因为订单中可能有多个产品)
我希望以这样的方式组合上述两个表:对于每个product_order_id
,我得到一个可用于该产品的所有价格的列表。基本上我想知道可用的价格是什么以及客户选择了什么。下表说明了我的查询。
|product_order_id Date product_id store_id selling_price Placed|
|134323_3545 2016/03/11 134323 6433 2560.00 Yes |
|134323_3545 2016/03/11 134323 6343 2534.00 No |
|134323_3545 2016/03/11 134323 1243 2313.00 No |
|134323_3545 2016/03/11 134323 2424 2354.00 No |
|145565_9965 2016/03/11 145565 9887 5432.00 No |
|145565_9965 2016/03/11 145565 7645 5321.00 Yes |
我无法在R中解决这个问题。虽然我更喜欢R,但如果在mysql或python中有解决方案,我是开放的。完成此操作的步骤是(a)在product_order_id中为每个product_id选择product_order_id(B),搜索price_list(C)中的所有条目,将其附加到表中,并添加指定product_order_id的列,此列表适用于(d )重复下一个product_order_id的步骤。准备好数据帧后,我可以在列(product_order_id)上保留连接order_list表以获取最终的数据帧。我还没有掌握如何在R中做到这一点。
在阅读了关于循环和一些帮助之后,我能够创建一个循环来搜索一天中每个product_id的所有价格条目(product_date是date和product_id的串联):
datalist <- list()
for(i in (orderlisit_test$product_date){
dat <- filter(pricelist, pricelist$product_date==i)
datalist[[i]] <- dat
}
big_data = do.call("rbind", datalist)
但是,我还想添加另一列,指定每次迭代的order_id或product_order_id。所以,如果有人能帮助我,我应该如何循环以及同时添加另一个列,这将对我有很大的帮助。
答案 0 :(得分:0)
这将保留每个product_id的所有行
library(dplyr)
order_list_joined<-full_join(Price_list,order_list,by="product_id")
如果给定的product_id没有order_id,我们假设没有订单地点。
order_list_joined<-order_list_joined %>% mutate(Placed = ifelse(is.na(order_id),"No","Yes")