2016-06-23 8 views
1

私のデータフレームは、州名、年、および各年および各州の税額控除の3つの列で構成されています。以下は1つの状態の例です。dplyrを使用して遅れの差を計算する

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

各州ごとに1年間の税収の変更を計算したいと思います。私は次のコードを使用しました:

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

しかし、それは私に "エラー:1つの値を期待して"与えます。

誰でもこのエラーメッセージを説明し、dplyrを使用して正しくこれを行うのに役立つでしょうか?ありがとうございました。

+3

「要約」ではなく「変異」が必要なようです。また、 'diff'は長さnのベクトルが与えられたときに長さn-1のベクトルを返すので、最初の値として' NA'を追加する必要があります。したがって、コードは 'mutate(c(NA、diff(RealTaxRevs)))'となります。デフォルトでは1になっているので、 'lag'や' differences'を指定する必要はありません。 – eipi10

+0

@ eipi10これは完全に機能します。ありがとうございました :)。 – tnabdb

答えて

0

私たちは、あなたが関数のようdiffを使用する場合は、同様zooライブラリを使用することを検討してdata.table

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

を使用することができます。

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を追加することなく、ラグの数を増やすことができますこの方法:それはのようになる設定データフレームで

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

:その後、次のようなコードを持つことができます

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 
関連する問題