【问题标题】:I have two tables which I want to join in R based on date condition but it does not seem to work我有两个表,我想根据日期条件加入 R,但它似乎不起作用
【发布时间】:2017-11-25 08:01:02
【问题描述】:

我有两个表,我想根据两个条件在 R 中合并,其中一个是两天之间的差异,介于 -30 和 +30 天之间。

ID  FINAL_AMOUNT    ProcedureDate
10001282    19320   3/22/2017 1:44
10001282    37103   3/23/2017 11:11
10001282    22423   3/22/2017 19:49

ID  ResultDate  Amount 2
10001282    4/3/2017 6:25   0.4
10001282    3/27/2017 5:33  150.99
10001282    3/29/2017 5:50  116.71
10001282    4/5/2017 7:27   150.99
10001282    3/27/2017 5:33  0.4
10001282    3/29/2017 5:50  0.5
10001282    4/3/2017 6:25   150.99
10001282    4/5/2017 7:27   0.4
10001282    4/5/2017 7:27   0.4
10001282    4/5/2017 7:27   150.99
10001282    3/27/2017 5:33  0.4
10001282    3/29/2017 5:50  0.5
10001282    4/3/2017 6:25   150.99
10001282    4/3/2017 6:25   0.4
10001282    3/27/2017 5:33  150.99
10001282    3/29/2017 5:50  116.71

我想要一个笛卡尔积,表 1 是我的基表。 我正在使用下面的代码,但由于没有正确计算日差,我没有得到想要的结果。

library(sqldf)

sqldf("SELECT a.*,b.*,(b.ResultDate-a.ProcedureDate)as daydiff from table1 as a left join table2 as b
              on a.ID=b.ID
              and (-30)<=b.ResultDate-a.ProcedureDate<=(30)" )

谢谢

【问题讨论】:

  • 如果日期实际上是字符串,那么您不能在 R 或 SQL 中将字符串彼此相减。首先将它们转换为 Date 类。在 R 中。另外请查看 How to Askminimal reproducible example

标签: r date merge cartesian-product sqldf


【解决方案1】:

你是否验证了你在计算时得到了什么结果

b.ResultDate-a.ProcedureDate

只是天数吗?首先通过查看结果集中的 daydiff 列中的内容来检查这一点。如果没有,您可能需要一些演员才能在几天内获得差异。

除此之外,您还可以使用 abs() 函数,使 b.ResultDate-a.ProcedureDate 的结果差异始终为正并具有

abs(b.ResultDate-a.ProcedureDate) <= 30 

作为论据。 除此之外,如果您提供一个完整的示例来检查给定的答案是否正确,那会更容易described here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 2019-07-11
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多