2014-01-13 95 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和索引(X)具有相同的尺寸。

謝謝!

+1

可以節省一點的打字:'XTS(T( G1),index(D1))' – GSee

回答

1

因爲你想要做的事情是相對不尋常的(有一行xts是不尋常的),我認爲你找到的習語可能和其他東西一樣好。

我能想到的其他方式將是一次添加每列一個:

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

感謝您的回覆。使用名稱是我在其他類型問題中找到的解決方案,但它似乎更適合添加1或2個新列。在我的情況下,我可能會收到50或100,這是太多的打字。 (對我來說!)我懷疑這是我在這裏做的一件不尋常的事情。我在奇數時間收到一些數據,但希望保留在某種更大的文本文本中。謝謝! – LGTrader

+0

我嘗試了一些循環思路,但它們最終比矩陣方法更加冗長。 –