在R中将data.frame对象转换为xts对象

4

我希望尽可能高效地将我的csv文件转换为xts对象。然而,我似乎被卡住了,必须先应用read.zoo方法创建一个zoo对象,然后才能将其转换为xts对象。

gold <- read.zoo("GOLD.CSV", sep=",", format="%m/%d/%Y", header=TRUE)

Gold <- as.xts (gold, order.by=index(gold), frequency=NULL)

这是将我的初始GOLD.CSV文件转换为R xts对象的最有效方式吗?

2个回答

3
如果是文件,您需要读取它。因此,使用read.zoo(),但随后立即进行转换:
 gold <- as.xts(read.zoo("GOLD.CSV", sep=",", format="%m/%d/%Y", header=TRUE))

Ok?


可以!我不清楚你如何避免传递order.by参数。无论如何,我不确定你能否在效率上超越那行代码。似乎不存在read.xts函数或正在开发中。 - Milktrader
如果已经是一个 zoo 对象,它有一个索引并且不需要 order.by - Dirk Eddelbuettel
@Milktrader,我认为你混淆了xtsas.xts。请比较args(xts:::as.xts.zoo)args(xts) - Joshua Ulrich

2
你可以编写自己的read.xts函数。我们称之为包装函数,应该遵循以下步骤:
read.xts <- function(x, format = "%m/%d/%Y", header = TRUE, sep = ",") {
  result <- as.xts(read.zoo(x, sep = sep, format = format, header = header))
  return(result)
}

read.xts(file.choose())  # select your file

请注意 function() 中的参数。它们传递给函数体(花括号之间的代码)。如果 function() 参数有值,这意味着这是它们的默认值。如果您分配了新值(例如 function(x = "my.file.csv", sep = "\t")),它们将覆盖默认值。最后一行向您展示了如何使用您的新函数。请随意扩展此函数以使用其余的 read.zoo 参数。如果您对如何实现有任何具体问题,请不要害羞,直接问吧。 :)
我在日常工作中使用一些类似的小技巧。我创建了一个名为 workhorse.R 的文件,并在需要任何小函数时加载它(例如 source("d:/workspace/workhorse.R"))。

这是一个非常好的想法,我没有考虑到,因为我还在写 R 知识的前置函数。接下来是函数,所以这是一个完美的应用。此外,感谢您定义“包装器”函数,因为这个短语对我来说一直很难理解。现在开始有点明白了。 - Milktrader
不要害怕——这可能只需要一行代码:cubed <- function(x) x^3。现在尝试一下 cubed(1:3) - Dirk Eddelbuettel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接