【问题标题】:add multiple columns to an xts object将多列添加到 xts 对象
【发布时间】:2014-01-13 22:37:08
【问题描述】:

我在如何简洁地做到这一点上有点挣扎。我的解决方案,使用 matrix(...) 有效,但似乎有点像大锤。有没有更好的?

我有一个现有的 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

我的问题是 matrix(G1, nrow=1) 构造是否是执行此类操作的预期方式,问题是 xts 要求 X 和 index(X) 具有相同的维度。

谢谢!

【问题讨论】:

  • 你可以省点打字:xts(t(G1), index(D1))

标签: r xts


【解决方案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

【讨论】:

  • 感谢您的回复。使用名称是我在其他此类问题中找到的解决方案,但它似乎更适合仅添加 1 或 2 个新列。在我可能会收到 50 或 100 的情况下,打字太多了。 (对我来说!)我怀疑这是我在这里做的一种不常见的事情。我偶尔会收到一些数据,但希望将其保存在某种更大的 xts 上下文中。谢谢!
  • 我尝试了一些循环的想法,但它们最终比你的矩阵方法更冗长。
猜你喜欢
  • 2013-08-03
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 2015-01-29
  • 2021-09-28
相关资源
最近更新 更多