【问题标题】:Average percentage change over different years in RR中不同年份的平均百分比变化
【发布时间】:2018-12-19 12:39:03
【问题描述】:

我有一个数据框,我从中创建了一个可重现的示例:

country <- c('A','A','A','B','B','C','C','C','C')
year <- c(2010,2011,2015,2008,2009,2008,2009,2011,2015)
score <- c(1,2,2,1,4,1,1,3,2)

  country year score
1       A 2010     1
2       A 2011     2
3       A 2015     2
4       B 2008     1
5       B 2009     4
6       C 2008     1
7       C 2009     1
8       C 2011     3
9       C 2015     2

我正在尝试计算每个国家/地区的平均分数增加(或减少)百分比,方法是计算每年的 [(最终分数 - 初始分数)÷(初始分数)] 并在年数内取平均值.

 country year score  change
1       A 2010     1     NA
2       A 2011     2      1
3       A 2015     2      0
4       B 2008     1     NA
5       B 2009     4      3
6       C 2008     1     NA
7       C 2009     1      0
8       C 2011     3      2
9       C 2015     2  -0.33

我希望得到的最终结果:

  country  avg_change
1       A         0.5
2       B           3
3       C        0.55

如您所见,诀窍在于各国跨越不同的年份,有时中间会缺少年份。我尝试了不同的手动方式,但我确实很挣扎。如果有人可以提示我一个解决方案会很棒。非常感谢。

【问题讨论】:

    标签: r dataframe percentage


    【解决方案1】:

    有了dplyr,我们可以得到group_bycountrymeanscores的区别。

    library(dplyr)
    
    df %>%
      group_by(country) %>%
      summarise(avg_change = mean(c(NA, diff(score)), na.rm = TRUE))
    
    # country avg_change
    #  <fct>        <dbl>
    #1  A            0.500
    #2  B            3.00 
    #3  C            0.333
    

    使用具有相同逻辑的基本 R aggregate

    aggregate(score~country, df, function(x) mean(c(NA, diff(x)), na.rm = TRUE))
    

    【讨论】:

      【解决方案2】:

      我们可以使用data.table按'国家'分组,并取'score'的mean和'score'的lag之差

      library(data.table)
      setDT(df1)[, .(avg_change = mean(score -lag(score), na.rm = TRUE)), .(country)]
      #   country avg_change
      #1:       A  0.5000000
      #2:       B  3.0000000
      #3:       C  0.3333333
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多