read.delim () - ошибки «больше столбцов, чем имен столбцов» и «заголовок и столбцы» имеют разную длину » - PullRequest
6 голосов
/ 02 сентября 2011

Предварительная информация ОС: Windows XP Professional Версия 2002 с пакетом обновления 3;Версия R: R 2.12.2 (2011-02-25)

Я пытаюсь прочитать текстовый файл с разделителями табуляции в столбце размером 30 000 на 80 в R, используя функцию read.delim().Этот файл имеет заголовки столбцов со следующим соглашением об именах: "_".Код, который я использую для попытки чтения данных:

cc <- c("integer", "character", "integer", rep("character", 3), 
        rep("integer", 73))

example_data <- read.delim(file = 'C:/example.txt', row.names = FALSE,
                           col.names = TRUE, as.is = TRUE, colClasses = cc)

После отправки этой команды я получаю следующее сообщение об ошибке:

Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
more columns than column names
In addition: Warning message:
In read.table(file = file, header = header, sep = sep, quote = quote,  :
  header and 'col.names' are of different lengths

Информация, которая может быть важной- от столбца 8 до столбца 80 количество нулей в каждом столбце следующее:

column 08: 29,000 zeros
column 13: 15,000 zeros
column 19: 500 zeros
column 43: 15,000 zeros
columns 65-80: 29,000 zeros for each column

Может ли кто-нибудь помочь определить причины, по которым я получаю вышеуказанные сообщения об ошибках?Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

6 голосов
/ 02 сентября 2011

Причиной проблемы является использование аргумента col.names=TRUE.Предполагается, что это будет использоваться вручную, чтобы указать имена столбцов для результирующего фрейма данных, и, следовательно, должен быть вектор такой же длины, как столбцы во входных данных, по одному имени на столбец.

f Вы хотите read.delim чтобы взять имена столбцов из файла, рассмотрите возможность использования header=TRUE;Вы также можете пересмотреть row.names=TRUE, так как опять-таки это предназначено как спецификация имен строк, а не как инструкция для чтения их из файла.

Более подробная информация доступна на странице справки для read.delim.

5 голосов
/ 02 сентября 2011

У меня тоже недавно была такая же ошибка, и она исчезла после преобразования файла в разделенный запятыми или точкой с запятой и чтения его с помощью read.csv / read.csv2.Я знаю, что это не полный ответ, но, возможно, вы могли бы проверить это.

0 голосов
/ 29 ноября 2015

Если вы хотите прочитать как матрицу символов, то сначала конвертируйте ваш файл в формат .csv и используйте read.csv. Не используйте никакие другие объявления, кроме имени файла. например.;

read.csv("filepath")
...