2

我有一个包含许多此类行的文件

2010-01-12 19:40   1021.00000   0.00001     1.00
2010-01-12 19:50   1031.00000   0.00000     -1.00

为了把它读成动物园,我用

tmp <- read.table("myfile")
GOEMD <- zoo(tmp[,3], as.chron(paste(tmp[,1],tmp[,2]), format="%Y-%m-%d %H:%M"))

可以正常工作但我想read.zoo()改用。

我试过了

f <- function(x)  as.chron(paste(tmp[,1],tmp[,2]))
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN  = f)

甚至指定

colClasses= c("character","character","numeric","numeric","numeric")

但它不起作用;它说:第 136 行(我在上面粘贴的那个)没有 14 个元素。

我也试过:

tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN  = as.chron)
4

2 回答 2

3
  1. 里面的错字f已经指出来了。
  2. 还有一些read.zoo您可能希望利用的功能。首先,请注意,如果index参数的值是一个列表,那么该列表的每个组件中引用的列将作为单独的参数传递给FUN. 另请注意,有一个FUN2可用的参数应用于 的输出,FUN因此我们可以像这样以紧凑的方式编写它:

因此试试这个:

library(zoo)
library(chron)

Lines <- "2010-01-12 19:40   1021.00000   0.00001     1.00
2010-01-12 19:50   1031.00000   0.00000     -1.00"

z <- read.zoo(textConnection(Lines), index = list(1, 2), 
        FUN = paste, FUN2 = as.chron)

以上内容是自包含的,因此您可以将其逐字复制到剪贴板,然后将其粘贴到您的 R 会话中。要将它与您的文件一起使用,请替换textConnection(Lines)"myfile".

于 2010-11-19T18:49:50.143 回答
2

您的功能f必须搜索tmp. 您可能打算:

f <- function(x)  as.chron(paste(x[,1],x[,2]))
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = f)

此外,您发布的示例数据看起来像是制表符分隔的,而不是空格分隔的,因此您可能需要这样做:

tmp <- read.zoo("myfile", index = 1, sep="\t", FUN = as.chron)
于 2010-11-18T13:08:06.853 回答