R: как читать таблицу, разделенную пробелами, где некоторые строковые поля также содержат пробелы

У меня проблемы с импортом текстового файла, разделенного пробелами / несколькими пробелами, который также содержит столбцы со строками, в которых есть пробелы, которые не должны интерпретироваться как разделители!

В таблице нет имен столбцов, а максимальное количество столбцов - 9. Столбец 6 заключен в строку с пробелами. Столбцы 4, 7, 8, 9 необязательны и частично отсутствуют.

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

Вот URL-адрес файла: ftp: // ftp. ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt

Поскольку read.table выдает ошибку,

> read.table("ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt",sep="")
Fehler in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  Zeile 1 hatte keine 9 Elemente

Я сделал это вместо

lines <- readLines("ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt")

Вот образец lines:

a <- c("USC00080211  29.7258  -85.0206    6.1 FL APALACHICOLA  AIRPORT              HCN 72220", 
"USC00080228  27.2181  -81.8739    9.1 FL ARCADIA                            HCN      ", 
"USC00080236  27.1819  -81.3508   42.7 FL ARCHBOLD BIO STN                            ", 
"USC00080369  27.5947  -81.5267   46.9 FL AVON PARK 2 W                               ", 
"USC00080374  27.6000  -81.5000   46.0 FL AVON PARK 1 NW                              ", 
"USC00080390  27.8500  -81.5167   38.1 FL BABSON PARK 1 ENE                           ", 
"USC00080414  24.6589  -81.2761    0.9 FL BAHIA HONDA SP                              ", 
"USC00080478  27.8986  -81.8433   38.1 FL BARTOW                             HCN      ", 
"ACW00011604  17.1167  -61.7833   10.1    ST JOHNS COOLIDGE FLD                       ", 
"ACW00011647  17.1333  -61.7833   19.2    ST JOHNS                                    ", 
"AE000041196  25.3330   55.5170   34.0    SHARJAH INTER. AIRP            GSN     41196"
)
tf <- tempfile(fileext=".txt")
writeLines(a,tf)
shell.exec(tf)

#read.table(tf, sep = "", ??)

person Kay    schedule 12.09.2014    source источник
comment
Я думаю, уловка состоит в том, чтобы рассматривать его как файл фиксированной ширины. Вам должен помочь следующий вопрос с ответами: http://stackoverflow.com/questions/18720036/reading-big-data-with-fixed-width   -  person bdecaf    schedule 12.09.2014
comment
Спасибо, что указала мне правильное направление !!   -  person Kay    schedule 12.09.2014


Ответы (1)


Для справки:

Вот решение, которое я нашел благодаря @bdecaf ..

lines <- readLines("ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt")

w <- list(c(1,12), c(13,22), c(23,31), c(32,38), c(39,41), c(42,72), c(73,76), c(77,80), c(81,87))
ns <- c()
for(i in 1:length(w)) {
     ns[i] <- paste("C", i, sep = ".")
     assign(ns[i], str_trim(substring(lines, w[[i]][1], w[[i]][2])))
}

obj.list <- lapply(ns, get)
names(obj.list) <- ns
df <- data.frame(obj.list)
person Kay    schedule 12.09.2014
comment
Ага, это лучший способ. Для справки: есть функция write.fwf, которая позволит вам записывать данные обратно в формат фиксированной ширины, если в этом возникнет необходимость. - person Carl Witthoft; 12.09.2014