У меня есть набор данных, который выглядит следующим образом:
dat <- structure(list(year = c(2003, 2004, 2005, 2006, 2007, 2008, 2009,
2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017), CD = c(246.74,
271.25, 295.21, 307.46, 405.82, 391.65, 439.1, 538.39, 549.27,
559.94, 510.51, 516.14, 480.25, 472.18, 460.56), Growth = c(1.17,
0.94, 1.05, 0.95, 1, 1.04, 1.09, 1.08, 1, 1.08, 0.97, 0.99, 1.06,
0.99, 0.99)), .Names = c("year", "CD", "Growth"), class = "data.frame", row.names = c(NA,
-15L))
который выглядит как
year CD Growth
16 2003 246.74 1.17
17 2004 271.25 0.94
18 2005 295.21 1.05
19 2006 307.46 0.95
20 2007 405.82 1.00
21 2008 391.65 1.04
22 2009 439.10 1.09
23 2010 538.39 1.08
24 2011 549.27 1.00
25 2012 559.94 1.08
26 2013 510.51 0.97
27 2014 516.14 0.99
28 2015 480.25 1.06
29 2016 472.18 0.99
30 2017 460.56 0.99
Мне нужно создать новый столбец, вызов KD
, который принимает следующее значение:
За 2007 год CD
За все годы после 2007 года KD of the year before * Growth of the current year
За все годы до 2007 года, KD of the following year / Growth of the current year
Другими словами, 2007 год служит базовым годом, и KD[year == 2007]
должно составлять 405.82 , KD[year == 2008]
должно составлять 422.05 (405.82 * 1.04
) и KD[year == 2009]
должно быть 460,04 (422.05 * 1.09
)
Между тем, KD[year == 2006]
должно быть 427.18 (405.82 / 0.95
) и KD[year == 2005]
равно 406.84 (427.18 / 1.05
)
Есть ли простой способ сделать это в R без использования громоздких циклов for?