Подтвердить что ты не робот

повторяющиеся "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 файл (разделенный запятыми).

4b9b3361

Ответ 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 (все должны быть уникальными), а не столбец (который может содержать повторяющиеся значения). Это можно исправить с помощью одного из следующих двух решений:

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

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

Пример:
Здесь строка заголовка интерпретируется как имеющая на один столбец меньше данных, поскольку разделители не совпадают:

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

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

  1. Я сохранил свой файл как MS-DOS CSV. (Ранее он был сохранен как просто CSV, Excel Starter 2010). Открыл csv в notepad++. Ни одна кома не была непоследовательной (последовательность, как описано выше @Brian).
  2. Заметил, что я не использовал аргумент 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" Цолис