Создание объекта zoo из файла csv (с несколькими несоответствиями) с помощью R - PullRequest
4 голосов
/ 05 марта 2012

Я пытаюсь создать объект зоопарка в R из следующего файла CSV: http://www.cboe.com/publish/scheduledtask/mktdata/datahouse/Skewdailyprices.csv

Проблема, как представляется, заключается в том, что в период с 27.02.2006 по20.03.2006 (некоторые дополнительные запятые и "x"), которые приводят к проблемам.

Я ищу метод, который автоматически считывает полный CSV-файл в R.Каждый рабочий день появляется новая точка данных, и при выполнении предварительной обработки вручную вам придется каждый день вручную редактировать файл.

Я не уверен, что это единственные проблемы с этим файлом, но яне хватает идей, как создать зоопарк из этого временного ряда.Я думаю, что с некоторым знанием R это станет возможным.

Ответы [ 2 ]

5 голосов
/ 05 марта 2012

Используйте 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))
3 голосов
/ 05 марта 2012

Рекомендуется разделить этапы очистки и анализа. Поскольку вы упоминаете, что ваш набор данных часто меняется, эта очистка должна быть автоматической. Вот решение для автоочистки.

#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 = ","
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...