使用read.zoo而不是read.table和zoo()?

时间:2010-11-18 11:57:11

标签: r time-series zoo

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

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)

2 个答案:

答案 0 :(得分:3)

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

    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"

答案 1 :(得分: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)