2015-01-21 2 views
0

데이터 프레임에 대한 변환 함수를 완전히 이해하지 못했을 것 같습니다. 100에서 시작하여 첫 번째 값 (100)에 "1 + delta"를 곱하여 값이 증가하는 새 인덱스 (새 열)를 작성하려고합니다. 예상되는 결과는 순서대로해야yoy로 데이터 프레임에 새 열 만들기 - 변경 R

x = c(2000,2001,2002,2003,2004,2005,2006) 
delta = c(0.04,0.05,0.08,0.1,0.01,0.02) 
df = data.frame(x,delta) 

df = transform(df, z=c(100,z[-2]*(1+df$delta[-1]))) 

:

 x delta  z 
1 2000   NA 100.0000 
2 2001 0.04000000 104.0000 
3 2002 0.05000000 109.2000 
4 2003 0.08000000 117.9360 
5 2004 0.10000000 129.7296 
6 2005 0.01000000 131.0269 
7 2006 0.02000000 133.6474 

I 다음 값이 단지 등 "1 + 델타"여기

증가 계산 된 값이됩니다 나의 예입니다 문제를 편집하여 이해하기 쉽습니다.

코드는 예제에 나와있는 값을 생성해야하지만 그렇지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 카운트/반복 시작 위치, 즉 [-1] 또는 [-2] 또는 ...을 어떻게 알 수 있습니까?

이 멋진 커뮤니티에 미리 감사드립니다.

+0

이 내용을 다시 작성하여 이해할 수 있습니까? 당신이'y'를 가지고 있지 않다면 어떻게 그 값을 얇은 공기로부터 얻을 것이라고 기대합니까? '? transform '은'transform'보다는 표준 하위 집합 (예 :'foo [, 1] <-foo [, 1] * -1')을 특별히 추천한다고 지적하겠습니다. –

+0

방금 ​​기준 (100)을 정의하고이를 일정 비율만큼 증가 시키면 y가 희박 해지지 않습니다. Excel에서는 매우 쉽지만 R에서 수행하는 방법을 알고 싶습니다. –

+0

아, 그 경우 R-Intro (CRAN 및 모든 R 웹 사이트에서 사용 가능)를 읽고 게시하기 전에 언어를 배우십시오. 원하는 것은'y <- 100 + seq (0, X, length = Z)'입니다. 여기서'X'는 최대 증분이고'Z'는 결과 벡터에서 원하는 원소의 수입니다. –

답변

0

내 문제에 대한 해결책은 다소 간단

x = c(2000,2001,2002,2003,2004,2005,2006) 
delta = c(0.04,0.05,0.08,0.1,0.01,0.02) 
df = data.frame(x,delta) 

delta2 = 1+delta 
z = 100*cumprod(delta2) 
z 

은 I (x)는 원하는 Z 벡터를 반환하는 함수를 사용 cumprod. 물론 이것을 쓰는 더 좋은 방법이있을 수도 있습니다.

관련 문제