Можете ли вы указать количество столбцов в read.table? - PullRequest
5 голосов
/ 28 декабря 2011

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

Стандартный вывод обычно состоит из 6 столбцов, разделенных пробелами с возвратом каретки в конце. Это хорошо читается, просто используя "strip.white = TRUE" в "read.table."

У меня проблема, однако, b / c аннотация добавляется в строку, если параметр был зафиксирован как константа.
Добавление «flush = TRUE» позволяет мне пропустить эти случайные комментарии и прочитать все.

То, что я хотел бы сделать, это иметь эти комментарии, которые могут появляться только один раз в данном файле, добавляться как 7-й столбец.

Есть ли подход для чтения, который позволяет мне указать количество столбцов или какой-либо другой способ в этот 7-й столбец?

Фрагмент данных можно найти здесь

Данные выглядят так:

columns_1&2  column_3  column_4  column_6  column_6   column_7     
84:S 0:dorm  1.0000000 0.11E-005 0.9999979 1.0000021                           
85:p N:veg   1.0000000 0.0000000 1.0000000 1.0000000  Fixed               
86:p 0:dorm  0.260E-08 0.237E-05 -0.03E-05 0.46E-005

1 Ответ

10 голосов
/ 28 декабря 2011

Если все ваши столбцы расположены так же аккуратно, как и в связанном примере (т. Е. Если это «файл фиксированной ширины»), то это задание для read.fwf():

df <- read.fwf(file = "http://dl.dropbox.com/u/54791824/SO_data_frag.txt", 
               widths = c(8, 7, 29, 15, 16, 16,1000))

head(df,4)
        V1      V2 V3           V4        V5       V6           V7
1    82:S  0:dorm   1 1.625420e-06 0.9999968 1.000003                      
2    83:S  0:dorm   1 1.083245e-06 0.9999979 1.000002                      
3    84:S  0:dorm   1 1.081771e-06 0.9999979 1.000002                      
4    85:p  N:veg    1 0.000000e+00 1.0000000 1.000000  Fixed   

РЕДАКТИРОВАТЬ: В качестве альтернативы, как отмечает Джоран в комментариях, вы можете использовать read.table() с опцией fill=TRUE:

df2 <- read.table(file = "http://dl.dropbox.com/u/54791824/SO_data_frag.txt", 
                  fill = TRUE, 
                   col.names=paste("column", 1:7, sep="_")
...