gpt4 book ai didi

r - 在 R 中查找具有 "IF"条件的数据表

转载 作者:行者123 更新时间:2023-12-01 13:16:53 25 4
gpt4 key购买 nike

我有两个数据表。包含客户订单的表格(它显示客户 ID 和购买时的订单日期)和包含客户分割的表格(它显示客户在特定时间段内被归类为哪个分割)。

我想将数据表 2) 中的分割添加为数据表 1) 中的新变量,但当然只是客户在下订单时所在的分割。

Customer_Orders <- data.table(
customer_ID = c("A", "A"),
order_date = c("2017-06-30", "2019-07-30")
)
head(Customer_Orders)
customer_ID order_date
1: A 2017-06-30
2: A 2018-07-30


Customer_Segmentation <- data.table(
customer_ID = c("A", "A", "A"),
segment = c("1", "2", "3"),
valid_from = c("2017-01-01", "2018-01-01", "2019-01-01"),
valid_until = c("2017-12-31", "2018-12-31", "2019-12-31")
)
head(Customer_Segmentation)
customer_ID segment valid_from valid_until
1: A 1 2017-01-01 2017-12-31
2: A 2 2018-01-01 2018-12-31
3: A 3 2019-01-01 2019-12-31

这是我正在寻找的手动构建的结果

Result <- data.table(
customer_ID = c("A", "A"),
order_date = c("2017-06-30", "2019-07-30"),
segment = c(1, 3)
)
head(Result)
customer_ID order_date segment
1: A 2017-06-30 1
2: A 2019-07-30 3

目前,我的解决方案包括进行右连接,基本上将所有可能的段添加到客户订单表中的每一行,然后排除订单日期不在段期间之间的所有行。但是,由于我的数据集很大,这是一个非常缓慢且麻烦的解决方案

最佳答案

可能最简单的方法是使用 包裹:

library(sqldf)
sqldf("select * from Customer_Orders
left join Customer_Segmentation
on order_date between valid_from and valid_until
and Customer_Orders.ID = Customer_Segmentation.ID")


# customer_ID order_date customer_ID..3 segment valid_from valid_until
# 1 A 2017-06-31 A 1 2017-01-01 2017-12-31
# 2 A 2019-07-30 A 3 2019-01-01 2019-12-31

如果日期在提供的时间段之间,它会简单地连接表格

但如果你坚持使用往下看;

setkey(Customer_Segmentation,customer_ID,valid_from)
setkey(Customer_Orders,customer_ID,order_date)

ans <- Customer_Segmentation[Customer_Orders,list(.valid_from=valid_from,
valid_until,order_date,segment),
by=.EACHI,roll=T][,`:=`(.valid_from=NULL)]

ans


# customer_ID valid_from valid_until order_date segment
# 1: A 2017-06-31 2017-12-31 2017-06-31 1
# 2: A 2019-07-30 2019-12-31 2019-07-30 3

如果不需要,很容易去掉多余的列。

关于r - 在 R 中查找具有 "IF"条件的数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54083047/

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