2012-11-20 2 views
1

국가 별 GDP 값과 함께 날짜 열이있는 데이터 프레임이 있습니다."긴"데이터 프레임의 변화율을 계산하십시오.

df <- structure(list(geo = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 
       2L, 2L, 2L, 2L, 2L), .Label = c("DE", "FR"), class = "factor"), 
       date = structure(c(12784, 13149, 13514, 13879, 14245, 14610, 
       12784, 13149, 13514, 13879, 14245, 14610), class = "Date"), 
       GDP = c(2147975, 2249584.4, 2373993.1, 2382892.6, 2224501.8, 
       2371033.2, 1557584.8, 1621633.2, 1715655.4, 1713157.1, 1636336.3, 
       1707966.5)), .Names = c("geo", "date", "GDP"), row.names = c(NA, 
       -12L), class = "data.frame") 

가 지금은 한 해 동안 퍼센트 차이 해 보여 추가 열을 계산하고 싶습니다 : 다음 코드는 두 나라 (FR 및 DE) 6 년 2005-2010에 대한 샘플 데이터 집합을 재생합니다.

library(quantmod) 
# provides the Delt() function to calculate percent differences 

df$dtGDP <- as.numeric(Delt(df$GDP)) 

는 2010 년에서 DE-값을 사용하여 2005 년 FR에 대한 값을 계산하기 때문에 이것은, 잘못된이다 "요소 레벨 당"기능을 적용 할 수있는 방법이 있나요 : 나는 다음과 같은 시도?

+1

이것은 당신이 가능성이 찾을 수있는 매우 일반적인 "분할 적용-결합"질문 너무 많은 답변. – BenBarnes

+0

@BenBarnes 그래도 아래 DWin 대답을 좋아했습니다! – Ali

+0

사실 @BenBarnes가 맞을 수도 있습니다. 'tapply'와'ave'를 검색하면 아마도 내 것과 매우 흡사 한 많은 예제를 발견하게 될 것입니다. (다른 한편으로는 본질적으로 서로 동등한 plyr-package 함수를 가진 많은 예제를 찾을 수 있습니다.) –

답변

4
> df$dtGDP <-with(df, ave(GDP, geo, FUN=Delt)) 
> df 
    geo  date  GDP  dtGDP 
1 DE 2005-01-01 2147975   NA 
2 DE 2006-01-01 2249584 0.047304741 
3 DE 2007-01-01 2373993 0.055302971 
4 DE 2008-01-01 2382893 0.003748747 
5 DE 2009-01-01 2224502 -0.066469970 
6 DE 2010-01-01 2371033 0.065871558 
7 FR 2005-01-01 1557585   NA 
8 FR 2006-01-01 1621633 0.041120329 
9 FR 2007-01-01 1715655 0.057979943 
10 FR 2008-01-01 1713157 -0.001456178 
11 FR 2009-01-01 1636336 -0.044841655 
12 FR 2010-01-01 1707966 0.043774742 
+0

Excellent! 나는 두 줄을 수행했고 당신은 단 한 번의 명령으로 행동했다. – Ali

2

이 시도 :

foo <- aggregate(GDP~geo, df, function(x) list(Delt(x))) 
df <- cbind(df, dtGDP = as.numeric(unlist(foo[,-1]))) 
df 

을 이미이를 실행 한 가정 :

library(quantmod) 
df <- structure(list(geo = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 
       2L, 2L, 2L, 2L, 2L), .Label = c("DE", "FR"), class = "factor"), 
       date = structure(c(12784, 13149, 13514, 13879, 14245, 14610, 
       12784, 13149, 13514, 13879, 14245, 14610), class = "Date"), 
       GDP = c(2147975, 2249584.4, 2373993.1, 2382892.6, 2224501.8, 
       2371033.2, 1557584.8, 1621633.2, 1715655.4, 1713157.1, 1636336.3, 
       1707966.5)), .Names = c("geo", "date", "GDP"), row.names = c(NA, 
       -12L), class = "data.frame") 
관련 문제