2013-08-16 1 views
0

xts 오브젝트 xts_IndData3에는 금융 기기의 위치 크기와 다른 두 가지 특성을 기록하는 PositionSize 특성이 있습니다. NewEntrySize> = 0. NewExitSize는 < = 0입니다. 다른 곳에서 논의한 xts 오류를 피하기 위해 아래 코드를 조합했습니다. 내가 피하려고 시도한 오류는 동일한 표현식 내에서 두 개의 서로 다른 xts rowID를 참조하는 것과 관련이 있습니다. 여전히 아래 코드는 작동하지 않습니다. 도움을 위해 미리 감사드립니다.Rxts NextMethod 대체 길이 오류

EDITED ... xts 개체를 데이터 프레임으로 변환했습니다. 여기 데이터와 새로운 코드가 문제를 명확하게하기 위해 필요한 일을하고 있습니다.

> str(TestData) 
'data.frame': 12 obs. of 5 variables: 
$ DateTime     : Date, format: "2012-07-27" "2012-07-27" "2012-07-27" ... 
$ NewEntrySize    : int 0 0 0 1 0 0 0 0 0 0 0 0... 
$ NewExitSize    : int 0 0 0 0 0 0 0 0 0 -1 0 0... 
$ PositionSize    : int 0 0 0 1 0 0 0 0 0 -1 0 0... 
$ DesiredResultPositionSize: int 0 0 0 1 1 1 1 1 1 0 0 0... 
>  
> PositionSizeLag <- 0 
> PositionSizeLag <- as.integer(PositionSizeLag) 
> TestData$PositionSize <- as.integer(TestData$PositionSize) 
> TestData$NewEntrySize <- as.integer(TestData$NewEntrySize) 
> TestData$NewExitSize <- as.integer(TestData$NewExitSize ) 
> for (i in 1 : nrow(TestData)) { 
+  TestData[i]$PositionSize <- PositionSizeLag    + 
+         TestData[i]$NewEntrySize + 
+         TestData[i]$NewExitSize 
+  PositionSizeLag <- TestData[i]$PositionSize 
+ } 
Error in `$<-.data.frame`(`*tmp*`, "PositionSize", value = numeric(0)) : 
    replacement has 0 rows, data has 12 
> 

I는 xts 객체로 데이터 프레임을 변환했다. 다음은 객체의 xts 버전에있는 dput (head (xts_TestData))의 출력입니다. 당신이 data.frame에서와 수처럼

> dput(head(xts_TestData)) 
structure(c("2012-07-27", "2012-07-27", "2012-07-27", "2012-07-27", 
"2012-07-27", "2012-07-27", "0", "0", "0", "1", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", 
"0", "1", "1", "1"), class = c("xts", "zoo"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", index = structure(c(1343347200, 
1343347200, 1343347200, 1343347200, 1343347200, 1343347200), tzone = "UTC", tclass = "Date"), .Dim = c(6L, 
5L), .Dimnames = list(NULL, c("DateTime", "NewEntrySize", "NewExitSize", 
"PositionSize", "DesiredResultPositionSize"))) 
> 
+0

'NA'가 있습니까? 이것을 [reproducible]하게 만들었다면 (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example), 문제가 무엇인지 정확하게 말할 수 있었을 것입니다. for 루프를 사용하는 것보다 훨씬 빠르다. – GSee

+0

"xts 객체를 데이터 프레임으로 변환했습니다"?! 왜? – GSee

+0

'dput (head (xts_IndData3))'의 결과를 질문에 추가하십시오 – GSee

답변

1

당신은 정말 모든 as.integer 호출이 XTS 개체를 변경하지 마십시오 XTS 개체 유형을 혼합 할 수 없습니다. 속성으로 계산되므로 xts 객체에 DateTime 열을 가질 필요가 없습니다.

[$의 이상한 조합으로 인해 아래 코드에서 오류가 발생합니다. 열 ($ 사용), 다음에 ([ 사용)으로 먼저 열로 하위 집합하는 것이 좋습니다. TestData[i]이 data.frame의 을 반환하고, 또한 열을 반환 $하여 data.frame을 부분 집합 때문에

PositionSizeLag <- 0 
for (i in 1 : nrow(xts_TestData)) { 
    xts_TestData$PositionSize[i] <- PositionSizeLag + 
     xts_TestData$NewEntrySize[i] + xts_TestData$NewExitSize[i] 
    PositionSizeLag <- xts_TestData$PositionSize[i] 
} 

그리고 (A data.frame 사용) 문제의 코드에서 오류입니다. data.frame의 행을 반환하려면 TestData[i,] (쉼표에주의)이 필요합니다.