повторяющиеся "row.names" не допускаются ошибки
Я пытаюсь загрузить CSV файл, который имеет 14 столбцов, как это:
StartDate, var1, var2, var3, ..., var14
когда я выдаю эту команду:
systems <- read.table("http://getfile.pl?test.csv", header = TRUE, sep = ",")
Я получаю сообщение об ошибке.
повторяющиеся имена строк не допускаются
Мне кажется, что имя первого столбца вызывает проблему. Когда я вручную загружаю файл и StartDate
имя StartDate
из файла, R успешно считывает файл и заменяет имя первого столбца на X
Может кто-нибудь сказать мне, что происходит? Файл представляет собой CSV файл (разделенный запятыми).
Ответы
Ответ 1
Затем скажите 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)
Ответ 2
Этот связанный вопрос указывает на часть документации ?read.table
, которая объясняет вашу проблему:
Если есть заголовок, и первая строка содержит меньше поля чем количество столбцов, используется первый столбец на входе для имен строк. В противном случае, если row.names отсутствует, строки нумеруются.
Ваша строка заголовка, вероятно, имеет на 1 столбец меньше, чем остальная часть файла, и поэтому read.table
предполагает, что первый столбец - это row.names (все должны быть уникальными), а не столбец (который может содержать повторяющиеся значения). Это можно исправить с помощью одного из следующих двух решений:
- добавление разделителя (т.е.
\t
или ,
) к началу или концу строки заголовка исходного файла или
- удаление любых конечных разделителей в ваших данных
Выбор будет зависеть от структуры ваших данных.
Пример:
Здесь строка заголовка интерпретируется как имеющая на один столбец меньше данных, поскольку разделители не совпадают:
v1,v2,v3 # 3 items!!
a1,a2,a3, # 4 items
b1,b2,b3, # 4 items
Вот как это интерпретируется по умолчанию:
v1,v2,v3 # 3 items!!
a1,a2,a3, # 4 items
b1,b2,b3, # 4 items
Значения первого столбца (без заголовка) интерпретируются как имена строк: a1
и b1
. Если этот столбец содержит дубликаты, что вполне возможно, вы получите ошибку duplicate 'row.names' are not allowed
.
Если вы установите row.names = FALSE
, сдвиг не произойдет, но у вас все равно будет несоответствующее количество элементов в заголовке и в данных, поскольку разделители не совпадают.
Решение 1
Добавьте конечный разделитель в заголовок:
v1,v2,v3, # 4 items!!
a1,a2,a3, # 4 items
b1,b2,b3, # 4 items
Решение 2
Удалить лишний конечный разделитель из строк без заголовка:
v1,v2,v3 # 3 items
a1,a2,a3 # 3 items!!
b1,b2,b3 # 3 items!!
Ответ 3
У меня была эта ошибка при открытии 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=",")
Ответ 4
Кажется, проблема может быть вызвана несколькими причинами. Следующие два шага работали, когда у меня была та же ошибка.
- Я сохранил свой файл как MS-DOS CSV. (Ранее он был сохранен как просто CSV, Excel Starter 2010). Открыл csv в notepad++. Ни одна кома не была непоследовательной (последовательность, как описано выше @Brian).
- Заметил, что я не использовал аргумент sep = ",". Я использовал, и это сработало (хотя это аргумент по умолчанию!)
Ответ 5
Ответ здесь (fooobar.com/questions/124190/...) от @adrianoesch должен помочь (например, решает "Если вам известно решение, которое не требует неудобного обходного пути, упомянутого в вашем комментарии (сместите имена столбцов) скопируйте данные), это было бы здорово. "и"... требующие копирования данных ", предложенные @Frank).
Обратите внимание, что если вы откроете текстовый редактор, вы увидите, что количество полей заголовка меньше, чем количество столбцов под строкой заголовка. В моем случае набор данных имел "," отсутствует в конце последнего поля заголовка.
Ответ 6
Другой возможной причиной этой ошибки является то, что у вас есть все повторяющиеся строки. Если это так, проблема решается путем удаления повторяющихся строк.
Ответ 7
Вы можете открыть в excel и сохранить его там. Он будет переформатировать CSV, чтобы он работал.
Ответ 8
Независимо от read.csv или read.table, make row.names = NULL во время чтения файла. Он должен работать. Это сработало для меня таким же образом.
Ответ 9
В моем случае была запятая в конце каждой строки. Убрав это сработало
Ответ 10
Аналогичная проблема и здесь. Используя приведенную ниже функцию, в фреймворке, содержащем факторные переменные (номинальный/порядковый тип), путем преобразования всех этих пропозициональных таблиц для каждой переменной в кадр данных, это приводит к тому, что в первом столбце содержатся дублированные имена.
Эти имена не могут быть преобразованы в факторы, чтобы их сохранить? Как это может случиться? Это может быть решением этой проблемы!:)
tblFun <- function(x){
tbl <- table(x)
res <- cbind(tbl,round(prop.table(tbl)*100,2))
colnames(res) <- c('Count','Percentage')
res
}
do.call(rbind,lapply(df,tblFun))
Пример df:
Agree 413 77.34
Disagree 27 5.06
Dont know 16 3.00
Agree 505 94.57
Disagree 13 2.43
Dont know 0 0.00
искренне,
Элиас "Estatistics" Цолис