2017-12-01 6 views
1

몇 달 동안 코딩하지 않았으므로 다음 문제로 고생했습니다. 난 다음 집합을 가지고새로운 변수를 MUTATE로 추가하십시오 : 성장률

Year World_export China_exp World_import China_imp 
1 1992  3445.534 27.7310  3402.505 6.2220 
2 1993  1940.061 27.8800  2474.038 18.3560 
3 1994  2458.337 39.6970  2978.314 3.3270 
4 1995  4641.168 15.9790  5504.787 18.0130 
5 1996  5680.688 74.1650  6939.291 25.1870 
6 1997  7206.604 70.2440  8639.422 31.9030 
7 1998  7069.725 99.6510  8530.293 41.5030 
8 1999  5916.077 169.4593  6673.743 37.8139 
9 2000  7331.588 136.2180  8646.253 47.3789 
10 2001  7471.374 143.0542  8292.893 41.2899 
11 2002  8074.975 217.4286  9092.341 46.4730 
12 2003  9956.433 162.2522 11558.007 71.7753 
13 2004 13751.671 282.8678 16345.452 157.0768 
14 2005 15976.238 430.8655 16708.094 284.1065 
15 2006 19728.935 398.6704 22344.856 553.6356 
16 2007 24275.244 484.5276 28693.113 815.7914 
17 2008 32570.781 613.3714 39381.251 1414.8120 
18 2009 21282.228 173.9463 28563.576 1081.3720 
19 2010 25283.462 475.7635 34884.450 1684.0839 
20 2011 41418.670 636.5881 45759.051 2193.8573 
21 2012 46027.529 432.6025 46404.382 2373.4535 
22 2013 37132.301 460.7133 43022.550 2829.3705 
23 2014 36046.461 640.2552 40502.268 2373.2351 
24 2015 26618.982 781.0016 30264.299 2401.1907 
25 2016 23537.354 472.7022 27609.884 2129.4806 

어떤 내가 필요한 것은 간단하다 두 요소 사이의 차이를 확인, 즉 각 변수의 성장 속도를 계산하는 첫 번째 요소로 나누면 100

곱하는

내가 스크립트를 작성하는 것을 시도하고, 오류 메시지와 함께 끝이 :

trade_Ch %>% 
    mutate ( 
     World_exp_grate = sapply(2:nrow(trade_Ch),function(i)((World_export[i]-World_export[i-1])/World_export[i-1])) 
     ) 

오류 mutate_impl에 (.DATA, 도트) : 열 World_exp_grate이 해야합니다 따라서, 일반적으로 말해서, 내가 제대로 삽입의 모든 지원을 감사하겠습니다

x <- sapply(2:nrow(trade_Ch),function(i)((trade_Ch$World_export[i]-trade_Ch$World_export[i-1])/trade_Ch$World_export[i-1])) 

:이 코드 조각이 나에게 올바른 값을 제공하지만 길이 25 (행의 수) 나 하나가 아닌 24

dplyr 패키지에서 내 mutate 부분에 코드.

또는

이 문제를 해결하는 또 다른 우아한 방법이 있다면

는 모든 제안을 환영합니다.

+0

시도'trace_Ch %> % 돌연변이 (world_exp_grate = (World_export는 - 지연 (World_export)/지연 (World_explort))' – akrun

답변

0

희망 할 수있다!

library(dplyr) 
df %>% 
    mutate_each(funs(chg = ((.-lag(.))/lag(.))*100), World_export:China_imp) 
+0

와우!이게 가장 잘 작동합니다. 친구! – dkolkin

+0

도움이 된 것을 기쁘게 생각합니다 :) 환호! – Prem

+0

'mutate_each'는 제 지식으로는 사용되지 않습니다. 대신에'mutate_at'을 사용하십시오. – Tino

0

문제는 첫 번째 행의 World_exp_grate를 계산할 수 없다는 것입니다. 따라서 NA으로 설정해야합니다. 이 문제를 해결하기 위해

한 변형

trade_Ch %>% 
    mutate (World_export_lag = lag(World_export), 
      World_exp_grate = (World_export - World_export_lag)/World_export_lag)) %>% 
    select(-World_export_lag) 

lag 한 위치에 의해 벡터를 이동합니다.

lag(1:5) 

# [1] NA 1 2 3 4 
+0

는 문제의 원인을 가리키는 주셔서 감사합니다 I 그러나 결국 누락 된 값에 대해. 테이블의 첫 부분이 아니라 2017에 대한 가치가 없으므로 문제가 있다고 생각합니다 – dkolkin

1

우리는이 도움이

trade_Ch %>% 
    mutate(world_exp_grate = 100*(World_export - lag(World_export))/lag(World_export)) 
+1

정말 대단해요! 그래서 간단합니다! – dkolkin