如何用每组的滞后值计算比率?

时间:2019-06-18 12:14:14

标签: r dplyr

我有以下数据集:

a<-data_frame(school= c(2,2,2,2,2,3,3,3,3,3,3,3),
            year=c(2011,2011,2011,2012,2012,2011,2011,2011,2012,2012,2012,2012),
              numberofstudents=c(3,3,3,2,2,3,3,3,2,NA,2,4))

首先,我想将所有NA值更改为该组的该变量的平均值。因此,NA应该不是2.43。

第二,我想计算第四个变量,即学校的滞后价值与学生人数的比率。

data <- 
  a %>%
  group_by(school) %>%
  summarize(lag.value.ratio = lag(school, 1)/numberofstudents) %>% ungroup

不幸的是,我遇到以下错误:错误:列lag.value.ratio的长度必须为1(汇总值),而不是5。 如何避免此错误并获取平均组值而不是NA?

1 个答案:

答案 0 :(得分:0)

如果您希望组的平均值代替NA,则我将2.83计算为学校3的平均值。由于使用了汇总,因此会出现错误,因为它希望将结果折叠为n的数量。您拥有的组(在本例中为2)。我相信你想要的是一个变异。

编辑:我正在加载下面使用的库,并确保使用的lag函数来自dplyr包。

library(dplyr)
library(tidyr)    
    a<-data_frame(school= c(2,2,2,2,2,3,3,3,3,3,3,3),
                      year=c(2011,2011,2011,2012,2012,2011,2011,2011,2012,2012,2012,2012),
                      numberofstudents=c(3,3,3,2,2,3,3,3,2,NA,2,4))


a %>% 
  group_by(school) %>% 
  mutate(numberofstudents = replace_na(numberofstudents, mean(numberofstudents, na.rm = TRUE)),
         lag.value.ratio = dplyr::lag(school, 1)/numberofstudents) %>% 
  ungroup()

给予

# A tibble: 12 x 4
   school  year numberofstudents lag.value.ratio
    <dbl> <dbl>            <dbl>           <dbl>
 1      2  2011             3             NA    
 2      2  2011             3              0.667
 3      2  2011             3              0.667
 4      2  2012             2              1    
 5      2  2012             2              1    
 6      3  2011             3             NA    
 7      3  2011             3              1    
 8      3  2011             3              1    
 9      3  2012             2              1.5  
10      3  2012             2.83           1.06 
11      3  2012             2              1.5  
12      3  2012             4              0.75