2016-11-03 23 views
1

データプロバイダの四半期データには、四半期ごとのデータ値が実際には年初来の数値であるという問題があります。つまり、値はすべての前四半期の合計です(Q2 = Q1 + Q2、Q3 = Q1 + Q2 + Q3、...)。 元のデータの構造は、以下になります。私はそれゆえQ2、Q3及びQ4から前期を減算する必要四半期値を計算するためにdata.tableを使用して四半期ごとのデータに変換します。

library(data.table) 
library(plyr) 
dt.quarter.test <- structure(list(Year = c(2000L, 2000L, 2000L, 2000L, 2001L, 2001L, 2001L, 2001L) 
, Quarter = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L) 
, Data.Year.to.Date = c(162, 405, 610, 938, 331, 1467, 1981, 2501)) 
, .Names = c("Year", "Quarter", "Data.Year.to.Date"), class = c("data.table", "data.frame"), row.names = c(NA, -8L)) 

plyrパッケージのddply機能を使用して、目的の結果を得ることができました。

dt.quarter.result <- ddply(dt.quarter.test, "Year" 
    , transform 
    , Data.Quarterly = Data.Year.to.Date - shift(Data.Year.to.Date, n = 1L, type = "lag", fill = 0)) 

dt.quarter.result 
    Year Quarter Data.Year.to.Date Data.Quarterly 
1 2000  1    162   162 
2 2000  2    405   243 
3 2000  3    610   205 
4 2000  4    938   328 
5 2001  1    331   331 
6 2001  2    1467   1136 
7 2001  3    1981   514 
8 2001  4    2501   520 

しかし、それは非常に不器用なようだと、私はそれを改善し、特にdata.table内で直接それを行う方法についてのいくつかの入力を取得したいと思いますので、私は、コマンドを使用して、本当に満足していません。ここで

答えて

0

data.table構文です、あなたはdata.table cheat sheetが参考に見つけるかもしれない:多くの立派に見える

library(data.table) 
dt.quarter.test[, Data.Quarterly := Data.Year.to.Date - shift(Data.Year.to.Date, fill = 0), Year][]  

# Year Quarter Data.Year.to.Date Data.Quarterly 
# 1: 2000  1    162   162 
# 2: 2000  2    405   243 
# 3: 2000  3    610   205 
# 4: 2000  4    938   328 
# 5: 2001  1    331   331 
# 6: 2001  2    1467   1136 
# 7: 2001  3    1981   514 
# 8: 2001  4    2501   520 
+0

おかげで、。シフト()関数を初めて使用したのですか?利用可能なオプションに慣れてきたときは、いつも驚くべきことに、ソリューションがどれほど簡単であるかがわかります。 – hannes101

関連する問題