【问题标题】:Panel data moving average in ggplotggplot中的面板数据移动平均线
【发布时间】:2020-05-11 10:39:37
【问题描述】:

我正在处理如下所示的面板数据:

library(dplyr)
library(ggplot2)

df <- tibble(id = rep(1:5, each = 12),
             year = rep(2009:2020, 5),
             moved = c(1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0,
                       1, 0, 1, 0 , 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0 , 1, 0),
             occupation = c('carpenter','carpenter', 'carpenter', 'carpenter', 'carpenter', 'cleaner',
                            'cleaner', 'cleaner', 'cleaner', 'cleaner', 'mechanic', 'mechanic',
                            'mechanic', 'mechanic', 'mechanic', 'carpenter', 'carpenter', 'carpenter',
                            'carpenter', 'carpenter', 'cleaner', 'mechanic', 'carpenter', 'cleaner',
                            'cleaner', 'carpenter', 'cleaner', 'mechanic', 'mechanic', 'mechanic',
                            'carpenter','carpenter', 'carpenter', 'carpenter', 'carpenter', 'cleaner',
                            'cleaner', 'cleaner', 'cleaner', 'cleaner', 'mechanic', 'mechanic',
                            'mechanic', 'mechanic', 'mechanic', 'carpenter', 'carpenter', 'carpenter',
                            'carpenter', 'carpenter', 'cleaner', 'mechanic', 'carpenter', 'cleaner',
                            'cleaner', 'carpenter', 'cleaner', 'mechanic', 'mechanic', 'mechanic'))

为了可视化随时间推移的职业移动,我使用了以下代码:

ggplot(df,aes(x=year,y=moved,col=occupation)) +
  stat_summary(fun=mean,geom="line",alpha=0.7, size=1)

现在我想重新制作面板,以便获得“已移动”的 2 年移动平均线。是否可以通过使用 ggplot 来做到这一点,还是我需要重新制作面板?最好的解决方案是什么?

【问题讨论】:

    标签: r ggplot2 dplyr


    【解决方案1】:

    这是一个可能的解决方案。通常最好在数据框中进行计算。这是一种方法。我对最终图表的外观做了一些假设,因为问题中没有任何要求,所以我选择了清晰。

    library(dplyr)
    library(tidyr)
    library(zoo)
    library(ggplot2)
    
    #Data
    
    df <- tibble(id = rep(1:5, each = 12),
                 year = rep(2009:2020, 5),
                 moved = c(1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0,
                           1, 0, 1, 0 , 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0 , 1, 0),
                 occupation = c('carpenter','carpenter', 'carpenter', 'carpenter', 'carpenter', 'cleaner',
                                'cleaner', 'cleaner', 'cleaner', 'cleaner', 'mechanic', 'mechanic',
                                'mechanic', 'mechanic', 'mechanic', 'carpenter', 'carpenter', 'carpenter',
                                'carpenter', 'carpenter', 'cleaner', 'mechanic', 'carpenter', 'cleaner',
                                'cleaner', 'carpenter', 'cleaner', 'mechanic', 'mechanic', 'mechanic',
                                'carpenter','carpenter', 'carpenter', 'carpenter', 'carpenter', 'cleaner',
                                'cleaner', 'cleaner', 'cleaner', 'cleaner', 'mechanic', 'mechanic',
                                'mechanic', 'mechanic', 'mechanic', 'carpenter', 'carpenter', 'carpenter',
                                'carpenter', 'carpenter', 'cleaner', 'mechanic', 'carpenter', 'cleaner',
                                'cleaner', 'carpenter', 'cleaner', 'mechanic', 'mechanic', 'mechanic'))
    
    
    #data wrangle
    
    df1 <- 
      df %>% 
      group_by(occupation, year) %>%
      summarise(m_moves = mean(moved)) %>% 
      mutate(m_avg = rollmean(m_moves, 2, fill = NA, align = "right")) %>% 
      pivot_longer(cols = c(m_moves, m_avg), names_to = "avg", values_to = "val")
    
    # Plot
    
    ggplot(df1,aes(year, val))+
      geom_line(aes(linetype = avg, colour = occupation)) +
      scale_linetype_discrete(labels = c("2 year moving average", "Average moves"))+
      facet_wrap(~occupation, ncol = 1)+
      guides(colour = FALSE)+
      labs(linetype = "Average measure:")+
      theme(legend.position = "bottom")
    #> Warning: Removed 3 row(s) containing missing values (geom_path).
    
    

    reprex package (v0.3.0) 于 2020-05-11 创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-19
      • 2021-06-24
      • 2013-11-22
      • 2017-09-01
      • 2013-12-22
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多