字符列和数字列不能同时成为时间序列数据的一部分,因为 zoo 对象的数据部分是矩阵(并且矩阵必须全部为数字、全部为字符或全部为其他类型);但是,可以使用split= 在字符列上拆分为宽格式,而且我们可以通过指定format= 和tz= 来避免指定函数f。此外,我们必须指定存在标头 (header=) 并且字段用“,”字符分隔 (sep=)。
(下面我们使用text = Lines 来实现可重复性,但实际上将其替换为"test.csv"。)
Lines <- "TICKER,PER,DATE,TIME,CLOSE
SYMBOL,1,20160104,1002,14180.0000000
SYMBOL,1,20160104,1003,14241.0000000"
library(zoo)
read.zoo(text = Lines, header = TRUE, sep = ",", index = c("DATE", "TIME"),
split = "TICKER", format = "%Y%m%d %H%M", tz = "")
给予:
PER CLOSE
2016-01-04 10:02:00 1 14180
2016-01-04 10:03:00 1 14241
注意:如果你确实想使用你的函数f,那么省略format和tz并使用:
read.zoo(text = Lines, header = TRUE, sep = ",", index = c("DATE", "TIME"),
split = "TICKER", FUN = f)
这也可以,即将它读入数据框,然后将数据框读入动物园对象:
DF <- read.csv(text = Lines) # read.csv defaults to header=TRUE, sep=","
read.zoo(DF, index = c("DATE", "TIME"), split = "TICKER", FUN = f)