2012-01-17 2 views
-1

움직이는 창에서 xts 객체에 여분의 열을 추가하려고합니다. 이 내 원본 데이터움직이는 창 R

2010-09-08 15:02:00 9105 9115 9105 9115  20  
2010-09-08 15:04:00 9120 9120 9105 9120  77  
2010-09-08 15:08:00 9120 9125 9120 9125  86  
2010-09-08 15:11:00 9120 9120 9120 9120  7  
2010-09-08 15:14:00 9120 9125 9110 9125  43 

나는 다음과 같은 출력을 얻기 위해 마지막에 열을 추가하려면 : 나는 다음과 같은 코드를 작성했습니다

2010-09-08 15:02:00 9105 9115 9105 9115  20  -1 
2010-09-08 15:04:00 9120 9120 9105 9120  77  -2 
2010-09-08 15:08:00 9120 9125 9120 9125  86  -3 
2010-09-08 15:11:00 9120 9120 9120 9120  7  -4 
2010-09-08 15:14:00 9120 9125 9110 9125  43  0 

x<-x[order(x[,1])] 
    window<-nrow(x) 
    k<-0 

    for (i in 1:nrow(x)) { 
    result<-cbind(x[i,],k) #tried result[i], but got an error 
    k=-i 
    } 
    return(result) 

하지만, 마지막 행과 그 열을 0 대신에 -4로 반환합니다.

답변

2

우리가 약간의 열이있는 임의 data.frame 만들3210 :이,

dat$new = c(-1:-(nrow(dat) - 1), 0) 
> dat 
      x   y   z new 
1 0.23164856 0.1244782 0.04444403 -1 
2 0.02956714 0.1166311 0.68492965 -2 
3 0.55612567 0.5486006 0.50465624 -3 
4 0.98814715 0.2224405 0.26576011 -4 
5 0.24729992 0.1294572 0.27477560 0 

여기서 중요한 것은 벡터화 생각하는 것입니다

dat = data.frame(x = runif(5), y = runif(5), z = runif(5)) 

원하는 열을 추가는 매우 쉽습니다 for 루프가 필요 없습니다.

하지만이 솔루션을 좀 더 일반적인 것으로 만들고 싶은 부분에 대해 자세히 설명 할 수 있습니다.

+0

폴 감사합니다. 나는 시작과 끝 날짜의 선택에 따라 길이가 다른 시계열을 가지고있다. 따라서 위의 예에서 -4을 -nrow (x)와 동등하게 바꿀 수 있다면 문제가 해결 될 것입니다. – itcplpl

+1

@itcplpl : 마지막 행이 0이므로'-nrow (x) + 1'이 필요합니까? –

+0

내 대답을 수정했습니다. 이 방법으로 문제가 해결되면 눈금 표시를 정답으로 표시 할 수 있습니까? 질문을 해결 한 사람들이 나에게 어떤 담당자를 붙 였는지 보여줍니다.) –