我的数据框由三列组成:州名,年份以及每年和每个州的税收收据。以下是一个州的例子。
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正确执行此操作吗?谢谢。
答案 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