Reputation: 2429
I struggled a bit with how to do this concisely. My solution, using matrix(...) works but seems a bit sledge hammer like. Is there a better one?
I have an existing 1-row xts object (D1) and a non-xts vector (E1) that comes from an external source which I want to merge together:
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
My question here is whether the matrix(G1, nrow=1) construct is the intended way to do this sort of thing, the issue being that xts requires X and index(X) to have the same dimensions.
Thanks!
Upvotes: 3
Views: 2684
Reputation: 28978
As what you want to do is relatively unusual (having a single row xts is unusual), I think the idiom you have found might be as good as anything else.
The other way I can think of would be to add each column one at a time:
D1$a = 5
D1$b = 6
D1$c = 7
D1$d = 8
D1$e = 9
This gives:
> 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
Upvotes: 2