2014-01-13 2 views
3

나는 이것을 간결하게하는 방법으로 약간 어려움을 겪었습니다. 내 솔루션, 매트릭스 (...)를 사용하여 작동하지만 조금 썰매 망치처럼 보인다. 더 좋은가요?xts 객체에 여러 열 추가

나는이 1 행 XTS 객체 (D1)와 내가 함께 병합 할 외부 소스에서 오는 비 XTS 벡터 (E1) 기존 :

library(quantmod) 

getSymbols("SPY") 
data = get("SPY") 
is.xts(data) 

# Extract a single row xts object 
D1 = data[1,] 
index(D1) 
# Get the numerical part as a vector 
D1v = as.vector(D1) 

# New data from external source to be merged 
E1 = c(5,6,7,8,9,10) 

# Combine into new vector 
G1 = c(D1v, E1) 
G1 

# This fails, I think because xts treats G1 
# like a 1-column object, not a 1-row object? 
testXts1 = xts(G1, order.by = index(D1)) 

testXts2 = xts(matrix(G1, nrow=1), order.by = index(D1)) 
index(testXts2) 
testXts2 

여기 내 질문 여부 행렬 (G1, nrow = 1) 구조는 이런 종류의 작업을 수행하기위한 의도 된 방법입니다. xts에 X와 index (X)가 동일한 차원을 가져야한다는 문제가 있습니다.

감사합니다.

+1

당신은 약간의 입력을 절약 할 수 있습니다 내가 생각할 수있는

다른 방법은 한 번에 각 열을 추가하는 것입니다 G1), 색인 (D1))' – GSee

답변

1

당신이하고 싶은 일은 상대적으로 드물기 때문에 (단 한 줄의 행은 특이합니다), 당신이 발견 한 관용구가 다른 것보다 좋을지도 모릅니다. (`의 XTS (t :이 제공

D1$a = 5 
D1$b = 6 
D1$c = 7 
D1$d = 8 
D1$e = 9 

:

> D1 
      SPY.Open SPY.High SPY.Low SPY.Close SPY.Volume SPY.Adjusted a b c d e 
2007-01-03 142.25 142.86 140.57 141.37 94807600  122.03 5 6 7 8 9 
+0

귀하의 회신에 감사드립니다. 이름을 사용하는 것은이 유형의 다른 질문에서 찾은 해결책이지만 단 하나 또는 두 개의 새로운 열을 추가하는 것이 더 적합하다고 보입니다. 내가 50 또는 100을받을 수있는 나의 경우에는 너무 많은 타이핑이다. (나를 위해!) 나는 그것이 내가 여기서하고있는 드문 종류라고 생각한다. 이상한 시간에 약간의 데이터를 받았지만 일종의 큰 xts 컨텍스트로 유지하려고합니다. 감사! – LGTrader

+0

몇 가지 루프 아이디어를 시도했지만 매트릭스 접근 방식보다 훨씬 자세한 정보를 제공합니다. –