【问题标题】:Use dplyr to compute proportional change使用 dplyr 计算比例变化
【发布时间】:2016-06-23 21:31:58
【问题描述】:

我的数据框由三列组成:州名、年份以及每年和每个州的税收收据。下面是一个仅适用于一个州的示例。

  year RealTaxRevs
1 1971     8335046
2 1972     9624026
3 1973    10498935
4 1974    10052305
5 1975     8708381
6 1976     8911262
7 1977    10759032

我想计算上一年税收收入百分比的变化(例如(1977 年税收收入 - 1976 年税收收入)/ 1976 年税收收入)。代码大概是这样的:

data %>% group_by(state) %>% mutate(change = c(NA, diff(RealTaxRevs)/RealTaxRevs

但它不起作用,因为它正在计算与今年税收收入相关的百分比。如何将 RealTaxRevs 向后移动一个位置,以便我可以计算相对于上一年税收收入的百分比?还是 dplyr 中的一种优雅方式?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    使用lag:

    library(dplyr)
    data %>% 
      group_by(state) %>% 
      mutate(change = RealTaxRevs / lag(RealTaxRevs) - 1)
    

    【讨论】:

    • 看起来不错,但为什么是 -1?
    • 因为(a - b) / b = (a / b - 1)
    • 啊,我明白了。您使用的形式是否在数值上更稳定?
    • 效率更高(只调用一次 lag)。
    猜你喜欢
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 2020-12-30
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多