Я пытаюсь найти наилучший способ получить значение данных из фрейма данных, инфляция.
В приведенном ниже коде я хочу умножить значение в моем фрейме данных iData на значение инфляции. Это зависит от года данных для этого значения и года коэффициента, который я использую, но я не могу найти лучший способ заставить код работать.
Inflation <- structure(list(ID = 2:211, Code = structure(c(1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "GBP", class = "factor"),
CoefficientYear = c(1998L, 1999L, 2000L, 2001L, 2002L, 2003L,
2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L,
2013L, 2014L, 2015L, 2016L, 2017L, 2018L, 1998L, 1999L, 2000L,
2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L,
2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2018L,
1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L,
2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L,
2016L, 2017L, 2018L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L,
2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L,
2013L, 2014L, 2015L, 2016L, 2017L, 2018L, 1998L, 1999L, 2000L,
2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L,
2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2018L,
1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L,
2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L,
2016L, 2017L, 2018L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L,
2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L,
2013L, 2014L, 2015L, 2016L, 2017L, 2018L, 1998L, 1999L, 2000L,
2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L,
2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2018L,
1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L,
2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L,
2016L, 2017L, 2018L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L,
2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L,
2013L, 2014L, 2015L, 2016L, 2017L, 2018L), DataYear = c(2009L,
2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2009L,
2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2009L,
2009L, 2009L, 2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 2010L,
2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 2010L,
2010L, 2010L, 2010L, 2010L, 2010L, 2011L, 2011L, 2011L, 2011L,
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L,
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2012L,
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L,
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L,
2012L, 2012L, 2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 2013L,
2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 2013L,
2013L, 2013L, 2013L, 2013L, 2013L, 2014L, 2014L, 2014L, 2014L,
2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L,
2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2015L,
2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L,
2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L,
2015L, 2015L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L,
2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L,
2016L, 2016L, 2016L, 2016L, 2016L, 2017L, 2017L, 2017L, 2017L,
2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L,
2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L,
2018L, 2018L), Percent = c(19.80424276, 18.46883619, 17.68356676,
16.44767208, 15.19147958, 13.82855804, 12.48396228, 10.43429397,
8.100766173, 5.779730258, 2.166231372, 0, -3.285714286, -7.769953931,
-10.59166368, -13.14621037, -14.60640197, -14.65642282, -15.29803602,
-17.98803602, -20.69803602, 23.08995704, 21.75455048, 20.96928105,
19.73338637, 18.47719387, 17.11427232, 15.76967656, 13.72000825,
11.38648046, 9.065444544, 5.451945658, 3.285714286, 0, -4.484239645,
-7.305949392, -9.860496079, -11.32068769, -11.37070853, -12.01232173,
-14.70232173, -17.41232173, 27.57419669, 26.23879012, 25.45352069,
24.21762601, 22.96143351, 21.59851197, 20.25391621, 18.2042479,
15.8707201, 13.54968419, 9.936185303, 7.769953931, 4.484239645,
0, -2.821709747, -5.376256434, -6.836448043, -6.886468885,
-7.528082084, -10.21808208, -12.92808208, 30.39590643, 29.06049987,
28.27523044, 27.03933576, 25.78314326, 24.42022172, 23.07562596,
21.02595765, 18.69242985, 16.37139394, 12.75789505, 10.59166368,
7.305949392, 2.821709747, 0, -2.554546687, -4.014738296,
-4.064759138, -4.706372337, -7.396372337, -10.10637234, 32.95045312,
31.61504655, 30.82977713, 29.59388245, 28.33768995, 26.9747684,
25.63017264, 23.58050433, 21.24697654, 18.92594062, 15.31244174,
13.14621037, 9.860496079, 5.376256434, 2.554546687, 0, -1.460191609,
-1.510212451, -2.15182565, -4.84182565, -7.55182565, 34.41064473,
33.07523816, 32.28996873, 31.05407405, 29.79788156, 28.43496001,
27.09036425, 25.04069594, 22.70716815, 20.38613223, 16.77263335,
14.60640197, 11.32068769, 6.836448043, 4.014738296, 1.460191609,
0, -0.050020842, -0.691634041, -3.381634041, -6.091634041,
34.46066557, 33.12525901, 32.33998958, 31.1040949, 29.8479024,
28.48498085, 27.14038509, 25.09071678, 22.75718899, 20.43615307,
16.82265419, 14.65642282, 11.37070853, 6.886468885, 4.064759138,
1.510212451, 0.050020842, 0, -0.641613199, -3.331613199,
-6.041613199, 35.10227877, 33.7668722, 32.98160278, 31.7457081,
30.4895156, 29.12659405, 27.78199829, 25.73232998, 23.39880219,
21.07776627, 17.46426739, 15.29803602, 12.01232173, 7.528082084,
4.706372337, 2.15182565, 0.691634041, 0.641613199, 0, -2.69,
-5.4, 37.79227877, 36.4568722, 35.67160278, 34.4357081, 33.1795156,
31.81659405, 30.47199829, 28.42232998, 26.08880219, 23.76776627,
20.15426739, 17.98803602, 14.70232173, 10.21808208, 7.396372337,
4.84182565, 3.381634041, 3.331613199, 2.69, 0, -2.71, 40.50227877,
39.1668722, 38.38160278, 37.1457081, 35.8895156, 34.52659405,
33.18199829, 31.13232998, 28.79880219, 26.47776627, 22.86426739,
20.69803602, 17.41232173, 12.92808208, 10.10637234, 7.55182565,
6.091634041, 6.041613199, 5.4, 2.71, 0), Value = c(0.198042428,
0.184688362, 0.176835668, 0.164476721, 0.151914796, 0.13828558,
0.124839623, 0.10434294, 0.081007662, 0.057797303, 0.021662314,
0, -0.032857143, -0.077699539, -0.105916637, -0.131462104,
-0.14606402, -0.146564228, -0.15298036, -0.17988036, -0.20698036,
0.23089957, 0.217545505, 0.20969281, 0.197333864, 0.184771939,
0.171142723, 0.157696766, 0.137200083, 0.113864805, 0.090654445,
0.054519457, 0.032857143, 0, -0.044842396, -0.073059494,
-0.098604961, -0.113206877, -0.113707085, -0.120123217, -0.147023217,
-0.174123217, 0.275741967, 0.262387901, 0.254535207, 0.24217626,
0.229614335, 0.21598512, 0.202539162, 0.182042479, 0.158707201,
0.135496842, 0.099361853, 0.077699539, 0.044842396, 0, -0.028217097,
-0.053762564, -0.06836448, -0.068864689, -0.075280821, -0.102180821,
-0.129280821, 0.303959064, 0.290604999, 0.282752304, 0.270393358,
0.257831433, 0.244202217, 0.23075626, 0.210259576, 0.186924299,
0.163713939, 0.127578951, 0.105916637, 0.073059494, 0.028217097,
0, -0.025545467, -0.040147383, -0.040647591, -0.047063723,
-0.073963723, -0.101063723, 0.329504531, 0.316150466, 0.308297771,
0.295938824, 0.283376899, 0.269747684, 0.256301726, 0.235805043,
0.212469765, 0.189259406, 0.153124417, 0.131462104, 0.098604961,
0.053762564, 0.025545467, 0, -0.014601916, -0.015102125,
-0.021518257, -0.048418257, -0.075518257, 0.344106447, 0.330752382,
0.322899687, 0.310540741, 0.297978816, 0.2843496, 0.270903643,
0.250406959, 0.227071681, 0.203861322, 0.167726333, 0.14606402,
0.113206877, 0.06836448, 0.040147383, 0.014601916, 0, -0.000500208,
-0.00691634, -0.03381634, -0.06091634, 0.344606656, 0.33125259,
0.323399896, 0.311040949, 0.298479024, 0.284849809, 0.271403851,
0.250907168, 0.22757189, 0.204361531, 0.168226542, 0.146564228,
0.113707085, 0.068864689, 0.040647591, 0.015102125, 0.000500208,
0, -0.006416132, -0.033316132, -0.060416132, 0.351022788,
0.337668722, 0.329816028, 0.317457081, 0.304895156, 0.291265941,
0.277819983, 0.2573233, 0.233988022, 0.210777663, 0.174642674,
0.15298036, 0.120123217, 0.075280821, 0.047063723, 0.021518257,
0.00691634, 0.006416132, 0, -0.0269, -0.054, 0.377922788,
0.364568722, 0.356716028, 0.344357081, 0.331795156, 0.318165941,
0.304719983, 0.2842233, 0.260888022, 0.237677663, 0.201542674,
0.17988036, 0.147023217, 0.102180821, 0.073963723, 0.048418257,
0.03381634, 0.033316132, 0.0269, 0, -0.0271, 0.405022788,
0.391668722, 0.383816028, 0.371457081, 0.358895156, 0.345265941,
0.331819983, 0.3113233, 0.287988022, 0.264777663, 0.228642674,
0.20698036, 0.174123217, 0.129280821, 0.101063723, 0.075518257,
0.06091634, 0.060416132, 0.054, 0.0271, 0), Method = structure(c(2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("",
"CPI"), class = "factor")), row.names = c(NA, -210L), class = "data.frame")
Inflation
iData <- structure(list(ID = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA), Indicator = c("Water consumption", "Water consumption",
"Water consumption", "Water consumption", "Water consumption",
"Water consumption", "Water consumption", "Water consumption",
"Water consumption", "Water consumption", "Water consumption",
"Water consumption"), IndicatorID = c(10L, 10L, 10L, 10L, 10L,
10L, 10L, 10L, 10L, 10L, 10L, 10L), InputA = c(0.8, 0.864291561,
0.756825327, 0.824653656, 0.852538526, 0.764414391, 0.751809875,
0.747453768, 0.844790034, 0.720459608, 0.816295228, 0.858032971
), Input.A.Name = c("Water consumed", "Water consumed", "Water consumed",
"Water consumed", "Water consumed", "Water consumed", "Water consumed",
"Water consumed", "Water consumed", "Water consumed", "Water consumed",
"Water consumed"), InputB = c(" NA ", " NA ", " NA ", " NA ",
" NA ", " NA ", " NA ", " NA ", " NA ", " NA ", " NA ", " NA "
), Input.B.Name = c(" NA ", " NA ", " NA ", " NA ", " NA ", " NA ",
" NA ", " NA ", " NA ", " NA ", " NA ", " NA "), UnitCode = c("GBP",
"GBP", "GBP", "GBP", "GBP", "GBP", "GBP", "GBP", "GBP", "GBP",
"GBP", "GBP"), DataYear = c(2016L, 2016L, 2016L, 2016L, 2016L,
2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L), Country = c("ALL",
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
"Angola", "Antigua and Barbuda", "Argentina", "Armenia", "Aruba",
"Australia"), ISO = c("ALL", "AFG", "ALB", "DZA", "ASM", "AND",
"AGO", "ATG", "ARG", "ARM", "ABW", "AUS"), Division = c("One",
"One", "One", "One", "One", "One", "One", "One", "One", "One",
"One", "One"), Further.Details.1 = c("fd1a", "fd1a", "fd1a",
"fd1a", "fd1a", "fd1a", "fd1a", "fd1a", "fd1a", "fd1a", "fd1a",
"fd1a"), Further.details.2 = c("fd2a", "fd2a", "fd2a", "fd2a",
"fd2a", "fd2a", "fd2a", "fd2a", "fd2a", "fd2a", "fd2a", "fd2a"
)), row.names = c(NA, 12L), class = "data.frame")
iData
Coeffb <- 1.98
CoeffbYear <- 2018
CoeffbCurrency <- 'GBP'
Step1 <- iData %>%
### filter for required indicator ID
filter(IndicatorID == 10) %>%
##### Add column with step
mutate(Step = 1) %>%
###### calculation
mutate(iresult_step1 = InputA * Coeffb) %>%
##### Inflation TDB #######
mutate(iresult_pos = iresult_step1 * (1 + with(Inflation, Value[DataYear== DataYear & CoefficientYear== CoeffbYear & Code==CoeffbCurrency])))
В идеале, еслиDataYear для моего значения InputA в iData - 2018, а год коэффициента - 2018, тогда функция подмножества должна возвращать 0, а значение result_step1 будет умножено на 1. В настоящее время кажется, что DataYear не правильно извлекает DataYear из iData. и я получаю сообщение об ошибке «Предупреждающее сообщение: в iresult_step1 * (1 + с (Инфляция, Значение [DataYear == DataYear &: длинная длина объекта не кратна короткой длине объекта»). Я не совсем уверен влучший способ убедиться, что он использует правильный DataYear, если я ввожу его вручную, тогда формула запускается, но, очевидно, неверна для точек данных другого года.
Любая помощь будет принята с благодарностью! Надеюсь, чтоЯ написал, имеет смысл!
NB мои iData намного больше, но сокращены до первых 10 строк, как это было доо большой.