【问题标题】:How calculate ratio with the lagged values per group?如何计算每组滞后值的比率?
【发布时间】:2019-07-20 11:33:44
【问题描述】:

我有以下数据集:

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?

【问题讨论】:

  • 嗨约翰,你看到我对你下面评论的问题了吗?这回答了你的问题吗?

标签: r dplyr


【解决方案1】:

如果您希望该组的平均值替换 NA,我计算 2.83 是学校 3 的平均值。您收到错误是因为您使用的是 summarise,它希望将结果折叠为您拥有的组(在本例中为 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 

【讨论】:

  • 我试过你的代码。我得到了不同的结果。 (在第 6 行,值 0.667 而不是 NA。
  • 您是否复制了确切的代码?在计算 lag.value.ratio 之前你有没有 ungroup?
猜你喜欢
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 2017-11-12
相关资源
最近更新 更多