我从雅虎获得以下两项资产的月度价格:
if(!require("tseries") | !require(its) ) { install.packages(c("tseries", 'its')); require("tseries"); require(its) }
startDate <- as.Date("2000-01-01", format="%Y-%m-%d")
MSFT.prices = get.hist.quote(instrument="msft", start= startDate,
quote="AdjClose", provider="yahoo", origin="1970-01-01",
compression="m", retclass="its")
SP500.prices = get.hist.quote(instrument="^gspc", start=startDate,
quote="AdjClose", provider="yahoo", origin="1970-01-01",
compression="m", retclass="its")
我想把这两个时间序列放在一个 Dataframe 中,并指定列名(Pandas现在允许这样做-有点讽刺,因为它们从R中获取了data.frame概念)。如下所示,我给这两个时间序列分配了名称:
MSFTSP500.prices <- data.frame(msft = MSFT.prices, sp500= SP500.prices )
但是,这并不保留我指定的列名[msft, snp500]
。我需要在单独的代码行中定义列名:
colnames(MSFTSP500.prices) <- c("msft", "sp500")
我尝试将colnames
和col.names
放入data.frame()
调用中,但不起作用。如何在创建数据框时定义列名?
我发现?data.frame
很没用...
2条答案
按热度按时间to94eoyn1#
这段代码失败了,并显示一条错误消息,指出
as.its
不可用。所以我添加了缺失的代码(在两次失败的尝试之后,它似乎成功了)。一旦发出缺失的require()
调用,就可以使用str
来查看get.hist.quote
实际返回的对象类型。它既不是 Dataframe ,也不是动物园对象,尽管它在许多方面类似于zoo-object:如果你在这两个对象上运行
cbind
,你会得到一个带有dimnames的规则矩阵:您仍然需要更改列名,因为似乎没有一个
cbind.its
可以让您分配列名。我会警告使用data.frame
方法,因为对象可能会在其行为中变得混乱:列仍然是S4对象。我想如果你要把它们传递给其他
its
-方法,这可能会很有用,但否则会很混乱。这可能是你想要的:7bsow1i62#
prices是一个zoo对象,它看起来像一个数据框架,有自己的列名,该列名被传输到对象
这将丢失第二个列名。
如果你做了
然后你会得到你想要的colnames(虽然你不会得到zoo特定的行为)。