gpt4 book ai didi

R data.table 使用日期非等值连接与查找 data.table 从查找中添加列

转载 作者:行者123 更新时间:2023-12-02 01:24:17 25 4
gpt4 key购买 nike

我想使用日期查找向 data.table 添加一列,匹配大于或等于 data.table 中日期的查找行。

例如,给定这个包含四个日期的简短表格:

dt1<-data.table(Dt=as.Date(rbind("2023-01-01", "2023-01-02", "2023-01-14", "2023-01-15")))
dt1
Dt
1: 2023-01-01
2: 2023-01-02
3: 2023-01-14
4: 2023-01-15

并给出第二个日期查找表:

dtLookup<-data.table(Dt=as.Date(rbind("2023-01-07", "2023-01-14", "2023-01-21")))
dtLookup
Dt
1: 2023-01-07
2: 2023-01-14
3: 2023-01-21

我想以某种方式加入并最终得到原始 dt1 表,该表具有与查找日期相对应的附加列。所以在这个例子中 dt1 看起来像这样:

dt1
Dt LookupDt
1: 2023-01-01 2023-01-07
2: 2023-01-02 2023-01-07
3: 2023-01-14 2023-01-14
4: 2023-01-15 2023-01-21

有没有办法将 dt1 非等值连接到 dtLookup 并根据 dtLookup 中找到的行设置新的 dt1 列?

最佳答案

我认为 findInterval (如 akrun 的答案)可能是给定示例数据的最佳选择,但如果您需要连接(例如其他列),请尝试这个:

dtLookup[, Dt2 := shift(Dt, type = "lag", fill = min(dt1$Dt)-1)]
dtLookup
# Dt Dt2
# <Date> <Date>
# 1: 2023-01-07 2022-12-31
# 2: 2023-01-14 2023-01-07
# 3: 2023-01-21 2023-01-14
dt1[dtLookup, Lookup := i.Dt, on = .(Dt > Dt2, Dt <= Dt)]
dt1
# Dt Lookup
# <Date> <Date>
# 1: 2023-01-01 2023-01-07
# 2: 2023-01-02 2023-01-07
# 3: 2023-01-14 2023-01-14
# 4: 2023-01-15 2023-01-21

这会在 dtLookup 中生成一个我们可以在内部使用的范围。

关于R data.table 使用日期非等值连接与查找 data.table 从查找中添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75164430/

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