簡體   English   中英

使用dplyr計算滯后差異

[英]Use dplyr to compute lagging difference

我的數據框由三列組成:州名,年份以及每年和每個州的稅收收據。 以下是僅一個州的示例。

  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正確地做到這一點? 謝謝。

我們可以使用data.table

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

如果你想使用diff like函數,那么也考慮使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM