【问题标题】:Merge between two dataframes based on column with reference to the date基于参考日期的列在两个数据框之间合并
【发布时间】:2020-11-25 19:12:35
【问题描述】:

我有两个数据框 - 一个是交易数据框,其中显示了商品编号和交易日期。另一个是显示产品价格(随时间变化)的价格数据框。

我需要将正确的价格从价格数据框合并到交易数据框。下面的模拟示例:

transaction_df<-data.frame(Date=as.Date(c("18/12/2013", "12/09/2019", "15/8/2017", "09/01/2018"), format = "%d/%m/%Y"), Item = c(8002, 8004, 8001, 8002))

item_price<-data.frame(item=c(8000, 8000, 8001, 8002, 8002, 8002, 8003, 8003, 8004, 8004), date=as.Date(c("17/02/2015", "09/11/2017", "01/02/2012", "30/09/2012", "12/05/2017", "23/11/2019", "20/01/2013", "18/03/2017", "07/02/2018", "19/10/2019"), format = "%d/%m/%Y"), price=c(12.47, 13.20, 35.99, 21.45, 20.83, 20.55, 44.60, 45.00, 5.35, 6.80))

result<-data.frame(Date=as.Date(c("18/12/2013", "12/09/2019", "15/8/2017", "09/01/2018"), format = "%d/%m/%Y"), Item = c(8002, 8004, 8001, 8002), result=c(21.45, 5.35, 35.99, 20.83))

价格是来自的价格,即如果只有一个价格,那就是价格,或者如果交易发生在今天,则适当的价格将是最近的价格。

当然,我可以使用 merge() 来复制价格,但还没有考虑到日期。我开始编写一个循环来完成它(非常粗略),但我有大量数据,而且我确信必须有一种更清洁的方法 - 也许使用 filter()。

不幸的是,我正在使用的机器无法访问包,因此 DPLYR 不是一个选项,但我很想看看是否/如何使用 transform() 来完成。

非常感谢您的帮助:)

【问题讨论】:

  • 好像是交易日期和商品日期不匹配。
  • 是的,抱歉我没说清楚。如果价格数据框仅包含价格变化。正确的价格将是最近的价格变化。在几十年的时间里,我有数千次价格变化 - 所以虽然我可以为每件商品/每一天制作一个数据框,但它会占用大量内存。

标签: r


【解决方案1】:

您的问题有几个问题

  1. 两个数据集中没有共同的日期。因此,我不确定您打算如何使用该变量进行合并。
  2. 变量名称区分大小写 - 您有“Item”和“item”,以及“Date”和“date”

当你解决了这些问题后,这应该可以工作

mergedfile <- merge(transaction_df , item_price , by=c("Item","Date"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2018-01-30
    • 2019-05-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多