我有一个包含许多此类行的文件
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)
答案 0 :(得分:3)
f
中的拼写错误已被指出。 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"
。
答案 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)