(这是对最初发布的here的质疑。
我原来的问题已经解决,但是我也想以稍微不同的方式合并这两个数据集。
df1
是某种“财务报告”数据,而df2
是某种“年终财务数据”。以前,我想将财务报告数据链接到最新的可用财务数据。
现在,我想使用财务报告(df2
)中的数据“预测”财务数据(df1
)。即通过ID
和date_f
和date
链接数据。
我想施加以下条件:
加入;
来自{{1}的 date
(t+1
)>来自df2
的{{1}}(date_f
),并且相差必须超过6个月,
否则;
在t
取df1
。 (即,如果date
(t+2
)在date
(t+1
)之后不到6个月,则在{{{1} }。
基本上,我想使用财务报告数据date_f
来预测t
中的数据,但是date
中的信息对于将来1周的预测没有用,因此我希望预测未来几年的数据。
数据如下:
df1:
t+2
df2:
df1
使用df2
的前5行的预期输出:
df1
ID date_f
1 1047699 2014-03-03
2 858339 2007-03-01
3 1002910 2009-12-22
4 277135 2011-02-18
5 753308 2004-03-09
6 1018840 2008-02-26
7 1510295 2011-10-21
8 3133 2014-02-27
9 1467858 2010-02-26
10 865436 2004-11-05
应该是 ID date year
1 3133 1999-12-31 1999
2 3133 2000-12-31 2000
3 3133 2001-12-31 2001
4 3133 2002-12-31 2002
5 3133 2003-12-31 2003
6 3133 2004-12-31 2004
中的df1
,它仍然> ID date_f date year
1 1047699 2014-03-03
2 858339 2007-03-01 2007-12-31 2007
3 1002910 2009-12-22 2010-12-31 2010 *
4 277135 2011-02-18 2011-12-31 2011
5 753308 2004-03-09 2004-12-31 2004
(在1周前),但是我要施加的条件是“它必须>> date
,而2009-12-31
必须在未来6个月(或180天)内。因此,在第二种情况下(由于相差仅1周),此观察失败了,所以我希望“预测”下一年的日期df2
。data1
date_f
data2
date_f
#
答案 0 :(得分:0)
我认为这解决了我的问题:
df1$start_date <- df1$date_f + 183
df1$end_date <- df1$date_f + 540
library(fuzzyjoin)
yy <- fuzzy_left_join(
df1, df2,
by = c(
"ID" = "ID",
"start_date" = "date",
"end_date" = "date"
),
match_fun = list(`==`, `<`, `>=`)
)
如果有人发现我的逻辑可能失败,请纠正我!
如果3月发布财务报告而7月发布财务信息,我想忽略此联接。因此,start_date <- df1$date_f + 183
。我还将上限设置为自财务报告发布之日起1.5年(540天)。因此,接下来的年度报告将正确地与正确的财务信息保持一致。
输出示例:
ID.x date_f start_date end_date ID.y date fyear
1 1006835 2008-09-30 2009-04-01 2010-03-24 NA <NA> NA
2 1510295 2009-10-19 2010-04-20 2011-04-12 1510295 2010-12-31 2010
3 1506307 2016-02-08 2016-08-09 2017-08-01 1506307 2016-12-31 2016
4 814453 2005-03-15 2005-09-14 2006-09-06 814453 2005-12-31 2005
5 832988 2003-06-19 2003-12-19 2004-12-10 832988 2004-01-31 2003
6 1275283 2007-02-26 2007-08-28 2008-08-19 1275283 2007-12-31 2007
7 858470 2004-03-15 2004-09-14 2005-09-06 858470 2004-12-31 2004
8 885639 2005-03-14 2005-09-13 2006-09-05 885639 2006-01-31 2005
9 732718 2014-04-02 2014-10-02 2015-09-24 NA <NA> NA
10 1385157 2009-03-02 2009-09-01 2010-08-24 1385157 2009-09-30 2009
即ID.x
= 1510295
的{{1}} = date.f
,如果加入2009-10-19
,可能会给我year
处的财务信息,该信息仅为2报告后的几个月……(对我来说不是很有用)
我创建2009-12-31
= start_date
和2010-04-20
= end_date
的边界。 2011-04-12
现在大于start_date
年终财务信息2009
的地方。
使用2009-12-31
将fuzzyjoin
中的date
与df2
中的边界进行匹配(我想),我能够加入它们。
df1
如果某人具有###############################################################################
版本,那将是很好的选择,因为此方法存在内存问题。
data.table
没有按预期工作...