Как получать ежеквартальные изменения от месячных данных? - PullRequest
0 голосов
/ 05 июля 2019

У меня есть столбец данных, который показывает месячную цену от мая 1987 года до июня 2019 года. Я хотел бы получать ежеквартальное изменение цен в виде отдельных данных и получу только q1 (январь-март) q2 (апрель-июнь) q3 (Июль-сентябрь) и q4 (октябрь-декабрь).Как я могу сделать это в R?Спасибо

monthly <- ts(prices,start=c(1987,5),frequency=12)
quarters <- monthly/stats::lag(monthly,-3)-1

1 Ответ

0 голосов
/ 05 июля 2019

1) Используя встроенный набор классов ts class AirPassengers, агрегируйте его до квартального уровня, получая a, так что a - это значения конца квартала, а затем рассчитывается доход.

a <- aggregate(AirPassengers, 4, function(x) tail(x, 1))
a / lag(a, -1) - 1

дает:

             Qtr1         Qtr2         Qtr3         Qtr4
1949               0.022727273  0.007407407 -0.132352941
1950  0.194915254  0.056737589  0.060402685 -0.113924051
1951  0.271428571  0.000000000  0.033707865 -0.097826087
1952  0.162650602  0.129533679 -0.041284404 -0.071770335
1953  0.216494845  0.029661017 -0.024691358 -0.151898734
1954  0.169154229  0.123404255 -0.018939394 -0.115830116
1955  0.165938865  0.179775281 -0.009523810 -0.108974359
1956  0.140287770  0.179810726 -0.050802139 -0.138028169
1957  0.163398693  0.185393258 -0.042654028 -0.168316832
1958  0.077380952  0.201657459 -0.071264368 -0.165841584
1959  0.204747774  0.162561576 -0.019067797 -0.125269978
1960  0.034567901  0.276849642 -0.050467290 -0.149606299

2) Другой подход - преобразовать его в зоопарк и использовать аргумент arith=FALSE diff, который он предоставляет.

library(zoo)
z <- as.zoo(AirPassengers)
az <- aggregate(z, as.yearqtr, tail, 1)
diff(az, arith = FALSE) - 1

дает:

     1949 Q2      1949 Q3      1949 Q4      1950 Q1      1950 Q2      1950 Q3 
 0.022727273  0.007407407 -0.132352941  0.194915254  0.056737589  0.060402685 
     1950 Q4      1951 Q1      1951 Q2      1951 Q3      1951 Q4      1952 Q1 
-0.113924051  0.271428571  0.000000000  0.033707865 -0.097826087  0.162650602 
     1952 Q2      1952 Q3      1952 Q4      1953 Q1      1953 Q2      1953 Q3 
 0.129533679 -0.041284404 -0.071770335  0.216494845  0.029661017 -0.024691358 
     1953 Q4      1954 Q1      1954 Q2      1954 Q3      1954 Q4      1955 Q1 
-0.151898734  0.169154229  0.123404255 -0.018939394 -0.115830116  0.165938865 
     1955 Q2      1955 Q3      1955 Q4      1956 Q1      1956 Q2      1956 Q3 
 0.179775281 -0.009523810 -0.108974359  0.140287770  0.179810726 -0.050802139 
     1956 Q4      1957 Q1      1957 Q2      1957 Q3      1957 Q4      1958 Q1 
-0.138028169  0.163398693  0.185393258 -0.042654028 -0.168316832  0.077380952 
     1958 Q2      1958 Q3      1958 Q4      1959 Q1      1959 Q2      1959 Q3 
 0.201657459 -0.071264368 -0.165841584  0.204747774  0.162561576 -0.019067797 
     1959 Q4      1960 Q1      1960 Q2      1960 Q3      1960 Q4 
-0.125269978  0.034567901  0.276849642 -0.050467290 -0.149606299 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...