r语言 - 从另一个列表中查找缺失的数据(两个日期之间)



更新:第一个问题已解决。 该问题是由 df2 引起的,因为 df2 不是 data.frame。

我的数据有两种棘手的情况(所有数据框都很大(。

1( DF看起来像:

ISO3     CurrencyCode        OriginalPrice 
USA            USD                   2.5
USA            n/a                   3.6
CAN            CAD                   2.8
...

DF2是一个货币代码列表看起来像

ISO3      CurrencyCode
USA              USD
CAN              CAD
JAP              JPY
...

我试图使用 df2 在 df 中找到那些丢失的货币代码。

我尝试了以下代码,但不起作用:

setDT(df)[df2, CurrencyCode:= CurrencyCode, on = .(ISO3)]

另一个问题类似,但更为复杂。

DF看起来像:

ID     PayDate        CurrencyCode   ISO3
1      2016/05/01      EUR            FIN
2      2019/01/14      CAD            CAN
...
10000  2015/07/31      USD            USA
10001  2018/12/07      CAD            CAN

DF2 看起来像:

StartDate     EndDate      CurrencyCode   Rate      ISO3
2015/01/01    2015/03/05     CAD          0.75      CAN
2017/05/08    2017/12/31     JPY          0.0091    JAP
....
2019/07/01    2019/08/31     JPY          0.0093    JAP

我想让 df 看起来像:

ID     PayDate        CurrencyCode   Rate    ISO3
1      2016/05/01      EUR           1.06    FIN
2      2019/01/14      CAD           0.85    CAN
...
10000  2015/07/31      USD           1       USA
10001  2018/12/07      CAD           0.75    CAN

费率由PayDate决定.PayDate应位于 df2 中的StartDateEndDate之间。 如果来自 df2 的信息不足,则应通过PayDateStartDate柜来定义速率。

这是我的代码:

setDT(df)[df2, Rate:= Rate, .(date =seq(StartDate, EndDate, by = "day")), by = .(ISO3)]

再说一遍....我有错误。

这是第一个"问题"的答案

library( data.table )
#or setDT(df);setDT(df2)
df <- fread("ISO3     CurrencyCode        OriginalPrice 
USA            USD                   2.5
USA            n/a                   3.6
CAN            CAD                   2.8")
df2 <- fread("ISO3      CurrencyCode
USA              USD
CAN              CAD
JAP              JPY")
#update join DF by reference with the CurrencyCode from df2
df[ df2, CurrencyCode := i.CurrencyCode, on = .(ISO3) ]
#    ISO3 CurrencyCode OriginalPrice
# 1:  USA          USD           2.5
# 2:  USA          USD           3.6
# 3:  CAN          CAD           2.8

对于第二个,非等值连接可能会起作用。但是如果没有适当的示例数据,我就无法生成代码。请提供更好的样品集,最好是导致您想要的输出的样品集

相关内容

  • 没有找到相关文章

最新更新