【发布时间】:2020-08-06 16:40:40
【问题描述】:
我正在尝试进行合并 - 即基于公共字符串链接两个数据集。但是,我尝试链接的变量会随着时间的推移而发生变化,因此合并需要考虑日期才能链接正确的值。而不是在每个日期都有一个值链接的矩阵,我有一个矩阵,它给出了每次值更改时的日期。
例如,假设我想将苹果和橙子的价格合并到特定日期购买的苹果和橙子列表中。我的第一个数据框(交易)包含购买日期,以及购买的是苹果还是橙子。第二个数据框包含苹果和橙子价格变化的日期,以及变化的日期(在此示例中,价格在 1 月 1 日发生变化,但实际上可以是任何日期。
> transactions <- data.frame(Date_Purchased = as.Date(c("02/01/2018", "02/01/2020", "02/01/2019", "02/01/2020"), format = "%d/%m/%Y"), Item_Purchased = c("APPLE", "APPLE", "ORANGE", "ORANGE"))
> transactions
Date_Purchased Item_Purchased
1 2018-01-02 APPLE
2 2020-01-02 APPLE
3 2019-01-02 ORANGE
4 2020-01-02 ORANGE
>price <- data.frame(Date=as.Date(c("01/01/2018", "01/01/2019", "01/01/2020", "01/01/2018", "01/01/2019", "01/01/2020"), format = "%d/%m/%Y"), Item = c("APPLE", "APPLE", "APPLE", "ORANGE", "ORANGE", "ORANGE"), Price = c(0.30, 0.35, 0.40, 0.60, 0.70, 0.75))
> price
Date Item Price
1 2018-01-01 APPLE 0.30
2 2019-01-01 APPLE 0.35
3 2020-01-01 APPLE 0.40
4 2018-01-01 ORANGE 0.60
5 2019-01-01 ORANGE 0.70
6 2020-01-01 ORANGE 0.75
一个苹果在 2018 年 1 月 2 日的成本是 30c,而它在 2020 年 1 月 2 日的成本是 40c。同样,2019 年 1 月 2 日橙子的成本为 70 美分,2020 年 1 月 2 日为 75 美分。
因此,我需要合并的数据集看起来像:
Date_Purchased Item_Purchased Price_On_Date_Purchased
1 2018-01-02 APPLE 0.30
2 2020-01-02 APPLE 0.40
3 2019-01-02 ORANGE 0.70
4 2020-01-02 ORANGE 0.75
不幸的是,我在使用的机器上真的受到限制,因为我无法访问 CRAN 库,也无法下载其他软件包,这意味着我无法使用 Neardate( ) 在我尝试过的功能中发挥作用,我认为这很有用。
这比我以前在 R 上的水平高出一个水平,所以说实话我有点茫然。
【问题讨论】:
-
如果您的数据框中只有这些数据类型,您可以创建一个函数,将
character类型的列重命名为Item_purchased,将数字(或dbl)类型的列重命名为@987654325 @,ETC。这会是一个合适的解决方案吗? -
@mhh 在真实数据中,项目,即苹果/橙子,是唯一代码,输入数字。您的意思是编写一个函数来为每个price 创建一个唯一的代码吗?这是可能的,但不确定我如何将其链接回交易数据。
标签: r