2017-11-27 18 views
2

1 년 전에 같은 분기에 비해 분기 차이를 얻고 싶습니다. 이 내가 2012Q1/2011Q1 minus 1을 계산할 내 df새 열 작성 : 현재 연도를 작년 분기 수에서 1로 나누십시오.

df <- data.frame(
    x0 = c('2010Q1', '2010Q2', '2010Q3', '2010Q4', '2011Q1', '2011Q2', 
     '2011Q3', '2011Q4', '2012Q1', '2012Q2', '2012Q3', '2012Q4', 
     '2013Q1', '2013Q2', '2013Q3', '2013Q4', '2014Q1', '2014Q2'), 
    x1 = c(14.0, 13.4, 13.8, 14.4, 14.2, 14.3, 14.0, 14.1, 14.6, 14.3, 
     14.0, 13.6, 13.5, 12.9, 13.2, 13.2,12.7, 13.6), 
    x2 = c(13.0, 13.3, 13.4, 13.7, 13.7, 13.9, 14.0, 13.9, 13.9, 14.0, 
     14.1, 13.8, 13.7, 13.8, 13.8, 13.8, 13.6, 13.9) 
) 

이며, 분기의 나머지 부분에 대한. 다음과 같은 df 얻을 :

df <- data.frame(
    x0 = c('2010Q1', '2010Q2', '2010Q3', '2010Q4', '2011Q1', '2011Q2', 
      '2011Q3', '2011Q4', '2012Q1', '2012Q2', '2012Q3', '2012Q4', 
      '2013Q1', '2013Q2', '2013Q3', '2013Q4', '2014Q1', '2014Q2'), 
    x1 = c(14.0, 13.4, 13.8, 14.4, 14.2, 14.3, 14.0, 14.1, 14.6, 14.3, 
      14.0, 13.6, 13.5, 12.9, 13.2, 13.2,12.7, 13.6), 
    x1_div = c(NA, NA, NA, NA, 0.018, 0.063, 0.009, -0.015, 0.031, 
       0.002, 0.004, -0.036, -0.081, -0.099, -0.059, -0.031, 
      -0.054, 0.057), 
    x2 = c(13.0, 13.3, 13.4, 13.7, 13.7, 13.9, 14.0, 13.9, 13.9, 14.0, 
      14.1, 13.8, 13.7, 13.8, 13.8, 13.8, 13.6, 13.9), 
    x2_div = c(NA, NA, NA, NA, 0.058, 0.051, 0.044, 0.013, 0.008, 0.006, 
       0.004, -0.008, -0.012, -0.017, -0.016, -0.005, -0.005, 
       0.007) 
) 

답변

1

우리는 mutate_at와 다음 분기 부분을 추출하여 그룹화 열을 생성 할 수 있습니다를 열 값에 의해 열의 lag을 분할하고 1

library(dplyr) 
library(stringr) 
df %>% 
    group_by(grp = str_extract(x0, "Q\\d")) %>% 
    mutate_at(vars('x1', 'x2'), funs(div = round(1- lag(.)/., 2))) %>% 
    ungroup %>% 
    select(-grp) 
에서 빼기
0

시계열 데이터를 사용하면 처음부터 시계열 클래스를 사용하면 이러한 작업이 더 쉬워집니다. 먼저 "yearqtr" 시간 색인이있는 동물원 개체 z을 만든 다음 diff.zoo을 사용하여 ret이라는 동물원 개체를 만듭니다. 이것은 fortify.zoo(ret)을 사용하여 데이터 프레임으로 다시 변환 될 수 있지만 필요하지 않을 수 있습니다. 마지막에는 autoplot.zoo를 사용하여 추가 처리의 예로 리턴의 ggplot2 플롯을 작성합니다. (멀티 패널 플롯을 얻기 위해 facet=NULL를 제거합니다.)

library(zoo) 

z <- read.zoo(df, FUN = as.yearqtr) 
ret <- diff(z, 4, arithmetic = FALSE) - 1 

library(ggplot2) 
autoplot(ret, facet = NULL) + scale_x_yearqtr() 

enter image description here