使用dplyr计算滞后差异

时间:2016-06-23 04:00:36

标签: r dplyr

我的数据框由三列组成:州名,年份以及每年和每个州的税收收据。以下是一个州的例子。

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

我想计算每个州的税收收入从一年到下一年的变化。我使用了以下代码:

data %>% group_by(state) %>% summarise(diff(RealTaxRevs, lag = 1, differences = 1))

但它给了我"错误:期待单个值"。

任何人都可以解释此错误消息,并帮助我使用dplyr正确执行此操作吗?谢谢。

2 个答案:

答案 0 :(得分:0)

我们可以使用data.table

 library(data.table)
 setDT(data)[, Diffs := RealTaxRevs - shift(RealTaxRevs)[[1]], state]

答案 1 :(得分:0)

如果您想使用diff之类的功能,请考虑使用zoo库。然后你可以得到如下所示的代码:

library(zoo)
diff(as.zoo(1:4), na.pad=T)

在数据框设置中,它将是:

dat <- data.frame(a=c(8335046, 9624026, 10498935, 10052305, 8708381, 8911262, 10759032))
dat %>% mutate(b=diff(as.zoo(a), na.pad=T))
#          a        b
# 1  8335046       NA
# 2  9624026  1288980
# 3 10498935   874909
# 4 10052305  -446630
# 5  8708381 -1343924
# 6  8911262   202881
# 7 10759032  1847770

通过这种方式,您可以轻松增加延迟次数,而无需不断添加NA

dat %>% mutate(b2=diff(as.zoo(a), lag=2, na.pad=T))
#          a       b2
# 1  8335046       NA
# 2  9624026       NA
# 3 10498935  2163889
# 4       NA       NA
# 5  8708381 -1790554
# 6  8911262       NA
# 7 10759032  2050651