2010-11-18 3 views
3

여러 행으로 오프셋 된 데이터 프레임에 기존 열의 복사본을 만들려고합니다.R 새 열이 고정 된 양만큼 오프셋 된 열의 복사본 만들기

예.

offset7 <- rep(0, 7) 
dataframe$column1.prev7 = c(offset7, dataframe$column1[1:(length(dataframe$column1)-7)]) 

그것이 내가 30 이상 오프셋 (offset)를 가지는 경우에 오류를주고 시작하지만 : 2 열은 다음 (1)에 의해 상쇄, 컬럼의 사본,

> dataframe 
$column1 
[1] 1 2 3 4 5 

$column2 
[1] 0 1 2 3 4 

경우 다음 코드 일부 성공을 거두었습니다. 내 데이터는 행의 수보다 큰 오프셋의 문제가되지 않을 정도로 충분히 길다. 오류 :

Error in dataframe$column1[1:(length(dataframe$column1) - 30)] : 
    only 0's may be mixed with negative subscripts 

미리 감사드립니다. plyr와 잘 어울리는 빠른 루프 무료 버전이 선호됩니다. 여기서 timeseries 데이터를 최대 1 년 동안 다양한 래그로 분해 한 다음 다양한 방법으로 결과를 분석합니다.

+0

사이드 바 : plyr은 정확히 "루프가 없습니다". 루핑 구조입니다. –

+0

Joris : plyr을 사용하여 데이터 프레임을 비트로 분할하여 개별적으로 작업하여이 워크 플로에 잘 들어 맞는 작업을 수행합니다. 예 : 이 경우 주식 데이터로 시장 데이터를 분할 한 다음 이전 열을 30 일 간격으로 상쇄하는 새 열을 추가했습니다. 내 코드는 : marketdata <- ddply (시장 데이터, c ("stock_symbol"), 변형, adj.close.Prev30 = c (list30, adj.close [1 : (length (stock_symbol) -30)]), parallel = 진실)하지만 머리를 주셔서 감사합니다! :) – psandersen

답변

8

은 시계열 연산에 적합한 시계열 클래스를 사용하십시오. 인기있는 즐겨 찾기는 zooxts이며 모두 많음 문서가 있습니다. 간단한 예를 들어

> library(xts) 
> foo <- xts(100:109, order.by=Sys.Date()+0:9) 
> merge(foo, l1=lag(foo,1), lm1=lag(foo,-1)) 
      foo l1 lm1 
2010-11-18 100 NA 101 
2010-11-19 101 100 102 
2010-11-20 102 101 103 
2010-11-21 103 102 104 
2010-11-22 104 103 105 
2010-11-23 105 104 106 
2010-11-24 106 105 107 
2010-11-25 107 106 108 
2010-11-26 108 107 109 
2010-11-27 109 108 NA 
> 

을 고려하지만, 단지 손으로하지 않습니다. 그리고 여기에서 '[r] xts'또는 [r] zoo '를 검색하여 R 태그 내에서 검색하십시오.

+1

+1 나 자신을 더 잘 말하지 못했습니다 ... – Shane

+0

고마워요! 그게 바로 제가 찾던 것입니다. – psandersen

관련 문제