чтение файла csv с повторными именами строк в R - PullRequest
23 голосов
/ 01 ноября 2010

Я пытаюсь прочитать CSV-файл с повторяющимися именами строк, но не смог.Я получаю сообщение об ошибке Error in read.table(file = file, header = header, sep = sep, quote = quote, : duplicate 'row.names' are not allowed.

Код, который я использую:

S1N657 <- read.csv("S1N657.csv",header=T,fill=T,col.names=c("dam","anim","temp"))

Пример моих данных приведен ниже:

did <- c("1N657","1N657","1N657","1N657","1N657","1N657","1N657","1N657","1N657","1N657")
aid <- c(101,102,103,104,105,106,107,108,109,110)
temp <- c(36,38,37,39,35,37,36,34,39,38)

data <- cbind(did,aid,temp)

Любая помощь будет оценена.

Ответы [ 6 ]

31 голосов
/ 01 ноября 2010

функция видит дублирующиеся имена строк, поэтому вам нужно с этим справиться. Вероятно, самый простой способ - использовать row.names = NULL , что приведет к нумерации строк - другими словами, ваш первый столбец будет рассматриваться как первое измерение, а не как номера строк. , и поэтому добавляет номера строк (последовательные целые числа, начинающиеся с «1».

read.csv("S1N657.csv", header=T,fill=T, col.names=c("dam","anim","temp"), row.names=NULL)
3 голосов
/ 01 ноября 2010

попробуйте это:

S1N657 <- read.csv("S1N657.csv",header=T,fill=T,col.names=c("dam","anim","temp"), 
          row.names = NULL)[,-1]
2 голосов
/ 31 декабря 2012

Проблема, с которой я столкнулся недавно, заключалась в том, что количество столбцов в строке заголовка не соответствовало количеству столбцов, которые были у меня в самих данных. Например, мои данные были разделены табуляцией, и все строки данных имели символ завершающей табуляции. Строка заголовка (которую я добавил вручную) отсутствует.

Я хотел, чтобы строки были автоматически пронумерованы, но вместо этого он рассматривал мою первую строку как имя строки. Из документов (выделено мной):

row.names вектор имен строк. Это может быть вектор, дающий действительные имена строк, или одно число, дающее столбец таблицы, который содержит имена строк, или символьная строка, дающая имя столбца таблицы, содержащего имена строк.

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

Использование row.names = NULL приводит к нумерации строк. Пропущенные или NULL row.names генерируют имена строк, которые считаются «автоматическими» (и не сохраняются as.matrix).

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

1 голос
/ 16 апреля 2014

Предполагаю, что ваш CSV-файл был преобразован из xlsx. Добавьте запятую в конец первой строки, удалите последнюю строку, готово

0 голосов
/ 13 ноября 2018

в моем случае проблема возникла из файла Excel. Хотя это казалось идеально организованным, оно не работало, и у меня всегда было сообщение: Error in read.table(file = file, header = header, sep = sep, quote = quote, : duplicate 'row.names' are not allowed.

Я попытался скопировать и вставить мою матрицу Excel в новый пустой лист Excel, и я попытался прочитать ее: это сработало! Больше никаких сообщений об ошибках!

0 голосов
/ 05 октября 2016

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

Пример:

"a","b","c"
a,b,c,d
a,b,c,d

Приведенный выше пример вызовет ошибку row.name, поскольку каждая строка имеет 4 значения, но имена имеют только 3 столбца.

Это случилось со мной, когда я создавал CSV из сетевых ресурсов.

...