gpt4 book ai didi

在两个表中使用组 ID 滚动连接

转载 作者:行者123 更新时间:2023-12-04 10:07:58 25 4
gpt4 key购买 nike

我们有两个数据框,第一个是一组产品的广告播出日期,第二个是同一组产品的销售日期。
我们希望在广告之后为每种产品的每个广告附上最近的销售。

这是输入的代码:

original_table = data.table(article = c('A','A','A','B','B','B','B'), 
date_ad = as.Date(c('2010-04-09','2011-07-12','2012-05-22','2011-07-12','2014-02-02','2015-04-13','2016-08-12'),))

> original_table
article date_ad
1: A 2010-04-09
2: A 2011-07-12
3: A 2012-05-22
4: B 2011-07-12
5: B 2014-02-02
6: B 2015-04-13
7: B 2016-08-12

table_to_join = data.table(article = c('A','A','B','B','B'),
date_sale = as.Date(c('2010-12-15','2012-08-20','2013-12-01','2016-01-05','2017-01-20'),))

> table_to_join
article date_sale
1: A 2010-12-15
2: A 2012-08-20
3: B 2013-12-01
4: B 2016-01-05
5: B 2017-01-20

将第二个表中的日期附加到第一个表中的日期后,输出应具有以下格式:
> result
article date_ad date_sale
1: A 2010-04-09 2010-12-15
2: A 2011-07-12 2012-08-20
3: A 2012-05-22 2012-08-20
4: B 2011-07-12 2013-12-01
5: B 2014-02-02 2016-01-05
6: B 2015-04-13 2016-01-05
7: B 2016-08-12 2017-01-20

附注: original_table可能有比 table_to_join 多得多的行,对于每篇文章。 original_table 中的多行可以链接到来自 table_to_join 的同一行.

我们如何以有效的方式获得它?

最佳答案

我们可以使用滚动连接 data.table

library(data.table)
table_to_join[, date_ad := date_sale][original_table,
on = .(article, date_sale = date_ad), roll = -Inf]
# article date_sale date_ad
#1: A 2010-04-09 2010-12-15
#2: A 2011-07-12 2012-08-20
#3: B 2015-04-13 2016-01-05
#4: B 2016-08-12 2017-01-20

我认为 OP 与输出列的命名混淆了。通过引用使用更新应该更清楚:
table_to_join[, date_ad := date_sale]
original_table[, date_sale :=
table_to_join[.SD, on=.(article, date_ad), roll=-Inf, x.date_sale]
]

输出:
   article  date_sale    date_ad
1: A 2010-04-09 2010-12-15
2: A 2011-07-12 2012-08-20
3: A 2012-05-22 2012-08-20
4: B 2011-07-12 2013-12-01
5: B 2014-02-02 2016-01-05
6: B 2015-04-13 2016-01-05
7: B 2016-08-12 2017-01-20

关于在两个表中使用组 ID 滚动连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61472292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com