2010-11-01 3 views
20

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

код я использую:

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) 

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

ответ

22

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

read.csv("S1N657.csv", header=T,fill=T, col.names=c("dam","anim","temp"), row.names=NULL) 
+0

это правый дуг! я вижу, что он обработал мой первый столбец (дамбы) как первое измерение, как вы сказали. я исключил бит [, -1] и переименовал мои столбцы, чтобы позаботиться о дополнительном добавленном. большое спасибо! – baz

+2

@Bazon, ваш заголовок не имеет имени для первого столбца. Если вы дадите ему имя, проблема будет решена автоматически. – VitoshKa

+0

hi doug, не должно быть запятой перед row.names = NULL, чтобы скрипт был: read.csv ("S1N657.csv", header = T, fill = T, col.names = c ("dam "," anim "," temp "), row.names = NULL – baz

3

попробовать это:

S1N657 <- read.csv("S1N657.csv",header=T,fill=T,col.names=c("dam","anim","temp"), 
      row.names = NULL)[,-1] 
+1

hi kohske, это сработал. Можете ли вы объяснить последнюю часть этого кода: [, -1], пожалуйста? Большое спасибо! – baz

+0

hi kohske, после запуска скрипта, я узнал, что [, -1] часть скрипта удалила имена строк или id моей дамы (сделал). – baz

+0

да, вы правы. если вам нужен первый столбец (возможно, дублированные имена каждой строки), удалите [, -1] из приведенного выше кода. – kohske

2

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

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

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

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

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

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

0

Гадание файла CSV был один преобразован из xlsx.Add запятой в конце первой строки, удалить последнюю строку, сделали

+1

Ваш ответ, похоже, не отвечает на вопрос, который был задан, и он некачественный. Пожалуйста, рассмотрите вопрос о разработке более – avalancha

+0

Это на самом деле полезно ... Как объяснялось выше Трэвисом Хетер, это может быть связано с отсутствием столбца в заголовке. Если это так, способ разрешить - открыть файл в текстовом редакторе, добавить запятую в конце первый ряд и сохраните его. После этого он должен быть найден. –

0

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

Пример:

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

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

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

Смежные вопросы