如何使用数据框B的t-1年的比率来填充数据框A的t年的缺失值

时间:2018-06-19 22:26:07

标签: r shiny dplyr tidyr

这个问题有点棘手,因为首先:涉及3个数据帧。对于2008年,一年级为6年级,但在2010年,一年级为7年级。

第二,我可以使用很多收集和散布在dplyr中执行此操作,但是我想知道是否存在一些简单的方法,在excel中执行此操作非常容易,我想应该有一些简单的方法可以执行此操作也是R。

非常感谢您。

请使用t-1年的data2中的信息填写t年的enrollment_by_grades中的缺失值。首先需要获得数据2的t年与t-1年的比率,然后将该比率乘以enrollment_by_grades的t-1年中的数字,然后预测t年的数目。

请注意,在data2中,它是特定年龄的人口,但在数据3中,它是关于特定年级的入学率。所以我们需要使用data1来连接它们。

非常感谢。

data2 = data.frame('population by age' = seq(3, 24, by = 1), 
                     '2008' = c(145391,
                                140621,
                                136150,
                                131944,
                                127968,
                                124209,
                                120650,
                                117163,
                                113674,
                                110207,
                                106871,
                                103659,
                                100398,
                                97017,
                                93584,
                                90240,
                                86957,
                                83783,
                                80756,
                                77850,
                                75003,
                                72226
                     ),  
                     '2009' = c(148566,
                                143943,
                                139367,
                                135083,
                                131052,
                                127237,
                                123628,
                                120213,
                                116826,
                                113381,
                                109915,
                                106574,
                                103346,
                                100058,
                                96644,
                                93175,
                                89788,
                                86455,
                                83241,
                                80192,
                                77279,
                                74422
                     ), 
                     '2010' = c(152330,
                                147261,
                                142555,
                                138172,
                                134071,
                                130214,
                                126559,
                                123099,
                                119825,
                                116538,
                                113134,
                                109669,
                                106320,
                                103075,
                                99760,
                                96312,
                                92805,
                                89372,
                                85988,
                                82733,
                                79661,
                                76739
                     ),  
                     '2011' = c(156630,
                                151387,
                                146491,
                                141905,
                                137593,
                                133545,
                                129737,
                                126124,
                                122678,
                                119397,
                                116093,
                                112666,
                                109174,
                                105791,
                                102505,
                                99159,
                                95699,
                                92193,
                                88759,
                                85373,
                                82123,
                                79065
                     )) 


  data1 = data.frame(item = c("Age for primary school","Duration for primary school", "Duration for middle school", "duration for high school"), 
                     '2008' = c(6, 6, 4, 3),  
                     '2009' = c(6, 6, 4, 3), 
                     '2010' = c(7, 5, 4, 3),  
                     '2011' = c(7, 5, 4, 3)) 

  enrollment_by_grades <- data.frame('grade' = seq(1, 15, by = 1), 
                                     '2008'= c(218701,
                                               161330,
                                               142190,
                                               NA,
                                               113549,
                                               112030,
                                               NA,
                                               NA,
                                               124359,
                                               NA,
                                               NA,
                                               NA,
                                               161330,
                                               NA,
                                               NA),
                                       '2009' = c(212196,
                                                  196398,
                                                  155033,
                                                  NA,
                                                  117611,
                                                  108403,
                                                  NA,
                                                  NA,
                                                  NA,
                                                  138320,
                                                  NA,
                                                  NA,
                                                  NA,
                                                  NA,
                                                  NA),

                                     '2010' = c(212512,
                                                NA,
                                                176268,
                                                143699,
                                                123374,
                                                103589,
                                                NA,
                                                197713,
                                                NA,
                                                74404,
                                                72506,
                                                44348,
                                                NA,
                                                NA,
                                                NA),
                                      '2011' = c(218529,
                                                 198933,
                                                 182182,
                                                 159103,
                                                 130980,
                                                 109439,
                                                 NA,
                                                 91933,
                                                 77973,
                                                 74404,
                                                 72506,
                                                 44348,
                                                 38768,
                                                 34522,
                                                 NA))

0 个答案:

没有答案