【问题标题】:How to calculate percent change in R when there are some years of data missing?当缺少几年的数据时,如何计算 R 的百分比变化?
【发布时间】:2023-01-14 08:09:58
【问题描述】:

我正在计算从一个学年到另一个学年的入学百分比变化,但是有些学年缺少数据,所以我不希望它计算这些实例中的变化并将其保留为空白而不是计算两年区别。我有很多年、学校和团体来做这件事。下面的示例数据框和我当前使用的代码。所以我在这个例子中遗漏了 2016-17 并且不想为 17-18 计算它。

 School      Academic Year  Group   Enrollment pct_change  
 1 School 1  2018-19        Overall 450        ANSWER 
 2 School 1  2017-18        Overall 630        NA
 3 School 1  2015-16        Overall 635        ANSWER
 4 School 1  2014-15        Overall 750        ANSWER
 5 School 1  2013-14        Overall 704        ANSWER 

data <- data %>%
  group_by(School, Group) %>% 
  mutate(pct_change = (((Enrollment-lead(Enrollment, order_by = `Academic Year`))/Enrollment)) * 100) %>%
  ungroup()

【问题讨论】:

    标签: r dplyr missing-data


    【解决方案1】:

    一个选项可能是扩展 complete 年的数据

    library(dplyr)
    library(tidyr)
    data %>%
        separate(`Academic Year`, into = c("Year", "Day"), 
    remove = FALSE, convert = TRUE) %>%
        group_by(School, Group) %>%
        complete(Year = full_seq(Year, period = 1)) %>%
         mutate(pct_change = (((Enrollment-lead(Enrollment, 
        order_by = Year))/Enrollment)) * 100) %>%
      ungroup()
        filter(complete.cases(Enrollment)) %>%
        select(-Year, -Day)
    

    【讨论】:

    • 我试过了,它仍然为 2017-18 年的案子提供了答案。也许是因为我在代码中更早地考虑了它?我会尝试分解
    • 哦,明白了。我需要做 Year,而不是 Academic Year 作为 order by。
    猜你喜欢
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 2021-11-30
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多