read.fwf и знак числа - PullRequest
       14

read.fwf и знак числа

9 голосов
/ 26 декабря 2011

Я пытаюсь прочитать этот файл (3,8 МБ), используя структуру фиксированной ширины, как описано в по следующей ссылке .

Эта команда:

a <- read.fwf('~/ccsl.txt',c(2,30,6,2,30,8,10,11,6,8))

выдает ошибку:

в строке 37 не было 10 элементов

После репликации проблемы с другими значениями опции пропуска я понялчто строки, вызывающие проблему, содержат символ "#".

Есть ли способ обойти это?

Ответы [ 2 ]

11 голосов
/ 26 декабря 2011

Как уже заметил @jverzani, эта проблема, вероятно, связана с тем, что знак # часто используется как символ для обозначения комментария. Установка входного аргумента comment.char для read.fwf на значение, отличное от #, может решить проблему. Я оставлю свой ответ ниже в качестве более общего случая, который вы можете использовать для любого символа, вызывающего проблемы (например, 's в названии голландского города 's Gravenhage).

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

Таким образом, мой подход будет состоять в том, чтобы удалить символ, который генерирует ошибку, или заменить другим символом. Это можно сделать с помощью текстового редактора (найти и заменить), в R-скрипте или с помощью некоторых инструментов linux, называемых grep и sed. Если вы хотите сделать это в сценарии R, используйте scan или readLines для чтения строк. Когда текст находится в памяти, вы можете использовать sub для замены символа.

Если вы не можете заменить символ, я бы попробовал следующий подход: заменить символ на символ, который не вызывает ошибку, прочитать его в R, используя read.fwf, и, наконец, заменить символ на символ #. 1017 *

4 голосов
/ 26 декабря 2011

В ответ на ответ выше: чтобы все символы читались как литералы, используйте в вызове как comment.char="", так и quote="" (последний заботится о проблеме @ PaulHiemstra с одинарными кавычками в собственных существительных голландского языка) в вызоведо read.fwf (это задокументировано в ?read.table).

...