(Это продолжение вопроса, который был первоначально размещен здесь .
Моя первоначальная проблема была решена, однако я хотел бы объединить эти два набора данных немного по-другомутакже.
df1
- это своего рода «финансовый отчет», а df2
- это «финансовый отчет на конец года». Ранее я хотел связать данные финансового отчета с последними доступными данными.финансовые данные.
Теперь я хотел бы «прогнозировать» финансовые данные (df2
), используя данные в финансовом отчете (df1
). То есть связать данные по ID
и date_f
и date
.
Я хотел бы наложить следующее условие:
Присоединиться, если;
date
(t+1
) из df2
> date_f
(t
) от df1
и разница должна составлять более 6 месяцев,
в противном случае;
принимать date
при t+2
(то есть, еслиdate
(t+1
) меньше чем через 6 месяцев после date_f
(t
), затем используйте date
at (t+2
).
По сути, я хочуиспользуйте данные финансового отчета df1
для прогнозирования данных в df2
, но информация в df1
бесполезна для прогнозирования на 1 неделю в будущем, поэтому я предпочел бы прогнозировать данные за следующие годы.
Данные выглядят следующим образом:
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
df2:
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
Ожидаемый вывод с использованием первых 5 строк 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
- Здесь
date
должно быть 2009-12-31
, которое находится в df2
, и оно все еще> date_f
(к 1 неделе), однако условие, которое я хотел бы навязать, это "этодолжно быть> 1064 *, а date
должно быть более 6 месяцев в будущем (или 180 дней).Таким образом, здесь это наблюдение не выполняется по второму условию (так как разница составляет всего 1 неделю), поэтому я хотел бы «прогнозировать» дату следующего года, которая составляет 2010-12-31
.
data1
df1 <- structure(list(ID = c(1047699L, 858339L, 1002910L, 277135L, 753308L,
1018840L, 1510295L, 3133L, 1467858L, 865436L), date_f = structure(c(16132,
13573, 14600, 15023, 12486, 13935, 15268, 16128, 14666, 12727
), class = "Date")), row.names = c(NA, -10L), .internal.selfref = <pointer: 0x0000000002511ef0>, class = "data.frame")
data2
df2 <- structure(list(ID = c(3133L, 3133L, 3133L, 3133L, 3133L, 3133L,
3133L, 753308L, 753308L, 753308L, 753308L, 753308L, 753308L,
753308L, 753308L, 753308L, 753308L, 753308L, 753308L, 753308L,
753308L, 753308L, 753308L, 753308L, 753308L, 753308L, 753308L,
1467858L, 1467858L, 1467858L, 1467858L, 1467858L, 1467858L, 1467858L,
1467858L, 1467858L, 1467858L, 1467858L, 1467858L, 1467858L, 1467858L,
1467858L, 1467858L, 1467858L, 1467858L, 1467858L, 1467858L, 277135L,
277135L, 277135L, 277135L, 277135L, 277135L, 277135L, 277135L,
277135L, 277135L, 277135L, 277135L, 277135L, 277135L, 277135L,
277135L, 277135L, 277135L, 277135L, 277135L, 1002910L, 1002910L,
1002910L, 1002910L, 1002910L, 1002910L, 1002910L, 1002910L, 1002910L,
1002910L, 1002910L, 1002910L, 1002910L, 1002910L, 1002910L, 1002910L,
1002910L, 1002910L, 1002910L, 1002910L, 858339L, 858339L, 858339L,
858339L, 858339L, 858339L, 858339L, 858339L, 858339L, 858339L,
858339L, 858339L, 858339L, 858339L, 858339L, 858339L, 858339L,
858339L, 858339L, 858339L, 865436L, 865436L, 865436L, 865436L,
865436L, 865436L, 865436L, 865436L, 865436L, 865436L, 865436L,
865436L, 865436L, 865436L, 865436L, 865436L, 865436L, 865436L,
1018840L, 1018840L, 1018840L, 1018840L, 1018840L, 1018840L, 1018840L,
1018840L, 1018840L, 1018840L, 1018840L, 1018840L, 1018840L, 1018840L,
1018840L, 1018840L, 1018840L, 1018840L, 1018840L, 1018840L, 1018840L,
1047699L, 1047699L, 1047699L, 1047699L, 1047699L, 1047699L, 1047699L,
1047699L, 1047699L, 1047699L, 1047699L, 1510295L, 1510295L, 1510295L,
1510295L, 1510295L, 1510295L, 1510295L, 1510295L, 1510295L, 1510295L
), date = structure(c(10956, 11322, 11687, 12052, 12417, 12783,
13148, 10956, 11322, 11687, 12052, 12417, 12783, 13148, 13513,
13878, 14244, 14609, 14974, 15339, 15705, 16070, 16435, 16800,
17166, 17531, 17896, 10956, 11322, 11687, 12052, 12417, 12783,
13148, 13513, 13878, 14244, 14609, 14974, 15339, 15705, 16070,
16435, 16800, 17166, 17531, 17896, 10956, 11322, 11687, 12052,
12417, 12783, 13148, 13513, 13878, 14244, 14609, 14974, 15339,
15705, 16070, 16435, 16800, 17166, 17531, 17896, 10956, 11322,
11687, 12052, 12417, 12783, 13148, 13513, 13878, 17166, 14244,
14609, 14974, 15339, 15705, 16070, 16435, 16800, 17531, 17896,
10956, 11322, 11687, 12052, 12417, 12783, 13148, 13513, 13878,
14244, 14609, 14974, 15339, 15705, 16070, 16435, 16800, 17166,
17531, 17896, 10864, 11230, 11595, 11960, 12325, 12691, 13056,
13421, 13786, 14152, 14517, 14882, 15247, 15613, 15978, 16343,
16708, 17074, 10622, 10987, 11353, 11718, 12083, 12448, 12814,
13179, 13544, 13909, 14275, 14640, 15005, 15370, 15736, 16101,
16466, 16831, 17197, 17562, 17927, 10956, 11322, 11687, 12052,
12417, 12783, 13148, 13513, 13878, 14244, 14609, 14609, 14974,
15339, 15705, 16070, 16435, 16800, 17166, 17531, 17896), class = "Date"),
year = c(1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L,
1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L,
2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L,
2017L, 2018L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L,
2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L,
2015L, 2016L, 2017L, 2018L, 1999L, 2000L, 2001L, 2002L, 2003L,
2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L,
2013L, 2014L, 2015L, 2016L, 2017L, 2018L, 1999L, 2000L, 2001L,
2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2016L, 2008L, 2009L,
2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2017L, 2018L, 1999L,
2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L,
2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L,
2018L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L,
2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L,
2016L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L,
2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L,
2015L, 2016L, 2017L, 2018L, 1999L, 2000L, 2001L, 2002L, 2003L,
2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2009L, 2010L, 2011L,
2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2018L)), row.names = c(NA,
-167L), .internal.selfref = <pointer: 0x0000000002511ef0>, class = "data.frame")
#