повторяющиеся «row.names» не допускаются ошибки - PullRequest
61 голосов
/ 13 января 2012

Я пытаюсь загрузить файл CSV, который имеет 14 столбцов, как это:

StartDate, var1, var2, var3, ..., var14

при вводе этой команды:

systems <- read.table("http://getfile.pl?test.csv", header = TRUE, sep = ",")

Я получаю сообщение об ошибке.

повторяющиеся имена строк не допускаются

Мне кажется, что имя первого столбца вызывает проблему. Когда я вручную загружаю файл и удаляю имя StartDate из файла, R успешно считывает файл и заменяет имя первого столбца на X. Может кто-нибудь сказать мне, что происходит? Файл представляет собой CSV-файл (через запятую).

Ответы [ 7 ]

90 голосов
/ 13 января 2012

Затем скажите read.table , а не , чтобы использовать row.names:

systems <- read.table("http://getfile.pl?test.csv", 
                      header=TRUE, sep=",", row.names=NULL)

, и теперь ваши строки будут просто пронумерованы.

Также посмотрите на read.csv которая является оберткой для read.table, которая уже устанавливает аргументы sep=',' и header=TRUE, так что ваш вызов упрощается до

systems <- read.csv("http://getfile.pl?test.csv", row.names=NULL)
34 голосов
/ 23 сентября 2013

Этот связанный вопрос указывает на часть документации ?read.table, которая объясняет вашу проблему:

Если есть заголовок и первая строка содержит на одно поле меньше, чемчисло столбцов, первый столбец во входных данных используется для имен строк.В противном случае, если row.names отсутствует, строки нумеруются.

В вашей строке заголовка, вероятно, на 1 столбец меньше, чем в остальной части файла, поэтому read.table предполагает, что первый столбец является именами строк (который должен быть уникальным), а не столбец (который может содержать повторяющиеся значения).Вы можете исправить это, добавив

  1. , добавив разделитель (например, \t или ,) в начало или конец строки заголовка исходного файла, или
  2. удаливлюбые конечные разделители в ваших данных

Выбор будет зависеть от структуры ваших данных

Пример: здесь заголовок имеет на один столбец меньше:

v1,v2,v3    # 3 items
a,a,a,      # 4 items
b,b,b,      # 4 items

Добавить конечный разделитель в заголовок:

v1,v2,v3,   # 4 items
a,a,a,      # 4 items
b,b,b,      # 4 items

Удалить лишний конечный разделитель из строк:

v1,v2,v3    # 3 items
a,a,a       # 3 items
b,b,b       # 3 items
1 голос
/ 20 декабря 2017

У меня была эта ошибка при открытии файла CSV, и в одно из полей были вставлены запятые.Поле было заключено в кавычки, и я вырезал и вставил read.table с цитатой в нем.После того, как я вынул quote = "", стандартное поведение read.table взяло на себя и устранило проблему.Итак, я пошел от этого:

systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",", quote="")

к этому:

systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",")
0 голосов
/ 05 марта 2018

В моем случае была запятая в конце каждой строки.Удалив, что сработало

0 голосов
/ 09 февраля 2017

Другая возможная причина этой ошибки - дублирование всех строк.Если это так, проблема решается путем удаления повторяющихся строк.

0 голосов
/ 19 января 2016

Ответ здесь (https://stackoverflow.com/a/22408965/2236315) от @adrianoesch должен помочь (например, решает "Если вы знаете решение, которое не требует неудобного обходного пути, упомянутого в вашем комментарии (сместите имена столбцов, скопируйте данные), это было бы здорово. "и" ... требующие копирования данных ", предложенные @Frank).

Обратите внимание, что если вы откроете в каком-либо текстовом редакторе, вы должны увидеть, что количество полей заголовкаменьше, чем число столбцов ниже строки заголовка. В моем случае в наборе данных отсутствовал знак "," в конце последнего поля заголовка.

0 голосов
/ 02 января 2016

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

  1. Я сохранил свой файл как MS-DOS CSV.(Ранее он был сохранен как просто CSV, Excel Starter 2010).Открыл csv в блокноте ++.Ни одна кома не была непоследовательной (последовательность, как описано выше @Brian).
  2. Заметил, что я не использовал аргумент sep = "," .Я использовал, и это сработало (хотя это аргумент по умолчанию!)
...