r - R - 根据日期差异加入两个数据框
问题描述
让我们考虑两个数据帧 df1 和 df2。我想仅根据日期差异加入数据框。例如;
数据框 1:(df1)
| version_id | date_invoiced | product_id |
-------------------------------------------
| 1 | 03-07-2020 | 201 |
| 1 | 02-07-2020 | 2013 |
| 3 | 02-07-2020 | 2011 |
| 6 | 01-07-2020 | 2018 |
| 7 | 01-07-2020 | 201 |
数据框 2:(df2)
| validfrom | pricelist| pricelist_id |
------------------------------------------
|02-07-2020 | 10 | 101 |
|01-07-2020 | 20 | 102 |
|29-06-2020 | 30 | 103 |
|28-07-2020 | 10 | 104 |
|25-07-2020 | 5 | 105 |
我需要根据 df2 中的 validfrom 列映射 pricelist_id 和 pricelist。假设基于 date_invoiced (df1) 和 validfrom (df2) 之间的最小差异,应该映射该行。
预期结果:
| version_id | date_invoiced | product_id | date_diff | pricelist_id | pricelist |
----------------------------------------------------------------------------------
| 1 | 03-07-2020 | 201 | 1 | 101 | 10 |
| 1 | 02-07-2020 | 2013 | 1 | 102 | 20 |
| 3 | 02-07-2020 | 2011 | 1 | 102 | 20 |
| 6 | 01-07-2020 | 2018 | 1 | 103 | 30 |
| 7 | 01-07-2020 | 201 | 1 | 103 | 30 |
我需要完全根据差异进行映射,差异应该是最小的。始终,date_invoiced (df1) 与 validfrom (df2) 相比应该具有最接近的差异。谢谢
解决方案
也许您可能想尝试使用date.table
最近的卷。在这里,连接是在DATE
fromDATEINVOICED
和df1
inVALIDFROM
上进行的df2
。
library(data.table)
setDT(df1)
setDT(df2)
df1$DATEINVOICED <- as.Date(df1$DATEINVOICED, format = "%d-%m-%y")
df2$VALIDFROM <- as.Date(df2$VALIDFROM, format = "%d-%m-%y")
setkey(df1, DATEINVOICED)[, DATE := DATEINVOICED]
setkey(df2, VALIDFROM)[, DATE := VALIDFROM]
df2[df1, on = "DATE", roll='nearest']
推荐阅读
- typescript - 打字稿可以自动检测数组的类型吗?
- ajax - 如何在 Django 和 postgresql 中使用 Chart.js
- python - 我想从图片的行和列创建一个列表
- php - 当我尝试使用 laravel 8 动态更改连接时,为什么会出现此错误?
- javascript - 如何从它的资产文件夹将 json/js 文件导入 Zendesk Copenhagen 主题中的 handlebarjs 模板?
- r - 用R中的零替换值<1之后的列中的所有值
- reactjs - 从 submitForm() TypeError 中捕获了一个未处理的错误:当我尝试使用 formik 提交我的登录表单时,submitValues 不是一个函数
- html - 在单独的页面中打印每个 Div
- php - 如何将表单的值传递给另一个表单 PHP?
- javascript - 如何在 TypeORM 中选择相关条件?