Прочитать текстовый файл с отсутствующими данными
Я понимаю, что подобные вопросы уже были заданы, но, учитывая, что ни один из предоставленных ответов не решает мою проблему, разочарование начинает наступать. Проблема заключается в следующем: у меня есть 27 данных временного ряда идентичной формы (дата, открытый, высокий, Низкий, последний) в формате txt, и я хочу импортировать их в R как файл.txt таким образом, чтобы первая прочитанная строка была со всеми 5 данными. Приведенный ниже пример показывает, что, хотя данные в текстовом файле начинаются с 1984-01-03, я хотел бы, чтобы файл был прочитан с 1990-11-05 (так как Open более ранние даты отсутствуют), сохраните первый столбец дат как имена строк и сохраните остальные 4 столбца как числовые с очевидным именем для каждого столбца.
Open High Low Last
1984-01-03 1001.40 997.50 997.50
1984-01-04 999.50 993.30 998.60
1990-11-05 2038.00 2050.20 2038.00 2050.10
1990-11-06 2055.00 2071.00 2052.20 2069.80
Учитывая, что это распространенная проблема, я попробовал следующий код:
ftse <- read.table("FTSE.txt", sep="", quote="", dec=".", as.is=TRUE,
blank.lines.skip=TRUE, strip.white=TRUE,na.strings=c("","NA"),
row.names=1, col.names=c("Open","High","Low","Last"))
Я пробовал все виды комбинации также с указанием colClasses, header=TRUE и других команд (для fill=TRUE данные фактически читаются, но это именно то, что я не хочу), но я всегда получаю следующую ошибку (или количество строка в сообщении об ошибке другая)
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
line 1731 did not have 4 elements
Строка 1731 соответствует дате 1984-01-03. Я прошу о помощи, так как я не могу позволить себе терять больше времени на такие вопросы, поэтому, пожалуйста, предоставьте предложения, как я могу это исправить. Заранее спасибо.
1 ответ
Я не знаю, каким может быть общее решение, но комбинация readLines и read.fwf может работать в вашем случае:
ftse.lines <- readLines("FTSE.txt")
ftse.lines <- ftse.lines[ftse.lines != ""] # skip empty lines
ftse <- read.fwf(textConnection(ftse.lines), widths=c(11,8,8,8,8), skip=1, row.names=1)
names(ftse) <- c("Open", "Hi", "Lo", "Last")
Возможно, вам придется изменить некоторые части, но это работает с вашим примером.
Следующее (используя только read.fwf) также работает:
ftse <- read.fwf("FTSE.txt", widths=c(11,8,8,8,8), col.names=c("blah", "Open", "Hi", "Lo", "Last"), skip=1)
А затем попробуйте преобразовать первый столбец в имена строк, если это действительно необходимо.