使用R从csv文件创建zoo对象(有一些不一致)



我正试图从以下csv文件在R中创建一个zoo对象:http://www.cboe.com/publish/scheduledtask/mktdata/datahouse/Skewdailyprices.csv

问题似乎是,在2006年2月27日至2006年3月20日期间,有一些小的不一致(一些额外的逗号和一个"x")导致了问题。

我正在寻找一种自动将完整的csv文件读取到R中的方法。每个工作日都有一个新的数据点,在进行手动预处理时,您必须每天手动重新编辑文件。

我不确定这些是否是这个文件的唯一问题,但我已经没有办法在这个时间序列中创建动物园对象了。我认为,如果对R有更多的了解,这应该是可能的。

使用colClasses告诉它有4个字段,并使用fill,这样它就知道如果任何行中缺少字段,就要填充它们。忽略警告:

library(zoo)
URL <- "http://www.cboe.com/publish/scheduledtask/mktdata/datahouse/Skewdailyprices.csv"
z <- read.zoo(URL, sep = ",", header = TRUE, format = "%m/%d/%Y", skip = 1, 
         fill = TRUE, colClasses = rep(NA, 4))

将清洁和分析步骤分开是个好主意。由于您提到数据集经常更改,因此此清理必须是自动的。这里有一个自动清理的解决方案。

#Read in the data without parsing it
lines <- readLines("Skewdailyprices.csv")
#The bad lines have more than two fields 
n_fields <- count.fields(
  "Skewdailyprices.csv", 
  sep = ",", 
  skip = 1
)
#View the dubious lines
lines[n_fields != 2]
#Fix them
library(stringr) #can use gsub from base R if you prefer
lines <- str_replace(lines, ",,x?$", "")
#Write back out to file
writeLines(lines[-1], "Skewdailyprices_cleaned.csv")
#Read in the clean version
sdp <- read.zoo(
    "Skewdailyprices_cleaned.csv", 
    format = "%m/%d/%Y", 
    header = TRUE, 
    sep = ","
)

最新更新