【发布时间】:2021-08-27 10:22:55
【问题描述】:
我的问题基本上是这样的:我有 2 个数据集预订数据 (BD) 和订单数据 (OD)。 BD 表示已预订但未付款/确认的订单,而 OD 仅具有已确认订单的记录(因此它们具有 Order_ID)。因此,BD 中的记录多于 OD。
它们的结构大致相同,只是 OD 表有另一个称为 Order_ID 的列。我从两个数据框中创建了一个新表,如下所示:
OD
Order_ID Departure_date created_at_date TF_PP
<dbl> <dttm> <dttm> <dbl>
1 792251 2021-07-17 00:00:00 2021-07-02 00:00:00 9045
2 792563 2021-07-17 00:00:00 2021-07-02 00:00:00 9045
3 794073 2021-07-17 00:00:00 2021-07-03 00:00:00 7524
4 795797 2021-07-17 00:00:00 2021-07-03 00:00:00 9045
5 796617 2021-07-17 00:00:00 2021-07-04 00:00:00 9045
6 797848 2021-07-17 00:00:00 2021-07-04 00:00:00 9045
BD
Departure_date created_at_date TF_PP
1: 2021-07-17 2021-07-02 9045
2: 2021-07-17 2021-07-02 9045
3: 2021-07-17 2021-07-02 9045
4: 2021-07-17 2021-07-03 9045
5: 2021-07-17 2021-07-03 7524
6: 2021-07-17 2021-07-03 9045
7: 2021-07-17 2021-07-03 9045
8: 2021-07-17 2021-07-04 5142
9: 2021-07-17 2021-07-04 9045
10: 2021-07-17 2021-07-04 10000
问题
我面临的问题是我想编写一个函数,该函数对于 OD 中的 EACH Order_ID,采用 created_at_date 和 TF_PP 的相应值,并在 BD 中找到一个低于 TF_PP OD 的 TF_PP by > 2000 AND 在 created_at_date AND 与 OD 中的 Order_ID 共享相同的离开日期。然后该函数返回一个新的数据框,该数据框具有两者的差异(差异 > 2000)以及 Order_ID、Departure_Date 和 created_at_date 列。但是,如果 diff
Output:
Order_ID Dep_Date OD(Created_at_Date) TF BD(Created_at_Date) TF Diff
766787 2021-07-17 2021-07-02 9040 2021-07-04 6950 2090
766787 2021-07-17 2021-07-02 9040 2021-07-12 6895 2145
839265 2021-08-20 2021-08-08 12987 2021-08-15 10000 2987
如果我的问题令人困惑或需要进一步澄清,请告诉我
编辑 输出输出
OD:
structure(list(Order_ID = c(792251, 792563, 794073, 795797, 796617,
797848, 798374, 798990, 801121, 801643, 808494, 809900, 810710,
814812, 815040, 815257, 817469, 819219), Departure_date = structure(c(1626480000,
1626480000, 1626480000, 1626480000, 1626480000, 1626480000, 1626480000,
1626480000, 1626480000, 1626480000, 1626480000, 1626480000, 1626480000,
1626480000, 1626480000, 1626480000, 1626480000, 1626480000), tzone = "UTC", class = c("POSIXct",
"POSIXt")), created_at_date = structure(c(1625184000, 1625184000,
1625270400, 1625270400, 1625356800, 1625356800, 1625356800, 1625443200,
1625443200, 1625529600, 1625702400, 1625788800, 1625788800, 1625961600,
1625961600, 1625961600, 1626048000, 1626048000), tzone = "UTC", class = c("POSIXct",
"POSIXt")), TF_PP = c(9045, 9045, 7524, 9045, 9045, 9045, 9045,
11245, 9045, 11245, 12945, 12945, 12945, 12945, 12945, 12945,
14945, 14945)), row.names = c(NA, -18L), groups = structure(list(
Order_ID = c(792251, 792563, 794073, 795797, 796617, 797848,
798374, 798990, 801121, 801643, 808494, 809900, 810710, 814812,
815040, 815257, 817469, 819219), .rows = structure(list(1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L,
15L, 16L, 17L, 18L), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = c(NA, -18L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
BD:
structure(list(Departure_date = structure(c(1626480000, 1626480000,
1626480000, 1626480000, 1626480000, 1626480000, 1626480000, 1626480000,
1626480000, 1626480000, 1626480000, 1626480000, 1626480000, 1626480000,
1626480000, 1626480000, 1626480000, 1626480000, 1626480000, 1626480000,
1626480000, 1626480000, 1626480000, 1626480000, 1626480000, 1626480000,
1626480000, 1626480000, 1626480000, 1626480000), tzone = "UTC", class = c("POSIXct",
"POSIXt")), created_at_date = structure(c(1625184000, 1625184000,
1625184000, 1625270400, 1625270400, 1625270400, 1625270400, 1625356800,
1625356800, 1625356800, 1625356800, 1625356800, 1625356800, 1625356800,
1625356800, 1625443200, 1625443200, 1625443200, 1625529600, 1625529600,
1625529600, 1625529600, 1625529600, 1625529600, 1625702400, 1625702400,
1625702400, 1625702400, 1625702400, 1625702400), tzone = "UTC", class = c("POSIXct",
"POSIXt")), TF_PP = c(9045, 9045, 9045, 9045, 7524, 9045, 9045,
9045, 9045, 9045, 9045, 9045, 9045, 9045, 9045, 11245, 9045,
9045, 11245, 11245, 11245, 11245, 11245, 11245, 11245, 11245,
11245, 12945, 12945, 12945)), row.names = c(NA, -30L), class = c("data.table",
"data.frame"), .internal.selfref = <pointer: 0x0000021d05e81ef0>)
'
【问题讨论】:
-
你能通过
dput分享数据吗? -
我之前没有使用过 dput,我该怎么做?
-
dput(your_data_frame)(dput(OD),dput(BD)) -
使用包data.table并进行非等连接。
-
我添加了 dput 输出
标签: r dplyr data.table