чтение файла csv с повторяющимися именами строк в R

Я пытаюсь прочитать 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)

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


person baz    schedule 01.11.2010    source источник
comment
Отвечает ли это на ваш вопрос? повторяющиеся имена строк не допускаются   -  person Brian D    schedule 14.04.2021


Ответы (7)


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

read.csv("S1N657.csv", header=T,fill=T, col.names=c("dam","anim","temp"), row.names=NULL)
person doug    schedule 01.11.2010
comment
это верно, Дуг! Я вижу, что мой первый столбец (идентификаторы плотин) рассматривался как первое измерение, как вы сказали. Я исключил бит [, -1], а затем переименовал свои столбцы, чтобы позаботиться о добавленном дополнительном столбце. большое спасибо! - person baz; 01.11.2010
comment
@Bazon, в вашем заголовке нет имени для первого столбца. Если вы дадите ему имя, проблема будет решена автоматически. - person VitoshKa; 01.11.2010
comment
привет, Дуг, не должно быть запятой перед row.names = NULL, чтобы сценарий был: read.csv (S1N657.csv, header = T, fill = T, col.names = c (dam, anim, temp ), row.names = NULL - person baz; 02.11.2010
comment
да, спасибо - опечатка, только что добавлена ​​запятая между двумя последними аргументами. - person doug; 02.11.2010
comment
row.names=NULL на самом деле не решает проблему, а просто прикрывает ее. Добавьте предложение, чтобы проверить, соответствует ли количество заголовков количеству значений. - person Travis Heeter; 05.10.2016

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

S1N657 <- read.csv("S1N657.csv",header=T,fill=T,col.names=c("dam","anim","temp"), 
          row.names = NULL)[,-1]
person kohske    schedule 01.11.2010
comment
привет коске, это сработало. Не могли бы вы объяснить последнюю часть этого кода: [, -1], пожалуйста? Большое спасибо! - person baz; 01.11.2010
comment
привет коше, при запуске скрипта я обнаружил, что часть скрипта [, -1] удаляет имена строк или мой идентификатор дамбы (сделал). - person baz; 01.11.2010
comment
да ты прав. если вам нужен первый столбец (возможно, повторяющиеся имена каждой строки), удалите [, -1] из приведенного выше кода. - person kohske; 01.11.2010
comment
koshke, я исключил [, -1] часть скрипта, так как мне все еще нужен мой первый столбец (идентификаторы дам), и переименуйте мои столбцы, чтобы позаботиться о созданном дополнительном столбце. большое спасибо! - person baz; 01.11.2010
comment
Думаю, лучше использовать header = TRUE, чем удалять буквально первую строку. - person Léo Léopold Hertz 준영; 06.05.2017

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

person chen    schedule 16.04.2014
comment
Ваш ответ не отвечает на заданный вопрос и имеет низкое качество. Пожалуйста, подумайте о том, чтобы уточнить немного больше - person avalancha; 16.04.2014
comment
Это действительно полезно ... Как объяснил выше Трэвис Хитер, это могло быть из-за отсутствия столбца в заголовке. В этом случае способ решения - открыть файл в текстовом редакторе, добавить запятую в конце первой строки и сохранить его. Его надо будет потом найти. - person George Liu; 12.10.2016

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

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

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

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

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

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

person imichaeldotorg    schedule 30.12.2012

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

Пример:

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

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

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

person Travis Heeter    schedule 05.10.2016

Я получал ту же ошибку «дублировать 'row.names' are not allowed» для небольшого CSV. Проблема заключалась в том, что где-то за пределами области диаграммы 14x14, которую я хотел, была случайная ячейка с пробелом / другими данными.

Я обнаружил ответ, когда запустил "row.names = NULL", и под моей таблицей было несколько строк с пустыми данными (и, следовательно, несколько повторяющихся имен строк все "пустые").

Решением было удалить все строки / столбцы за пределами области таблицы, и это сработало!

person Nathan Kuhn    schedule 17.07.2019

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

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

person SkyR    schedule 13.11.2018