Development Tip

중복 된 'row.names'는 허용되지 않습니다. 오류

yourdevel 2020. 11. 30. 20:04
반응형

중복 된 'row.names'는 허용되지 않습니다. 오류


다음과 같이 14 개의 열이있는 csv 파일을로드하려고합니다.

StartDate, var1, var2, var3, ..., var14

이 명령을 실행할 때 :

systems <- read.table("http://getfile.pl?test.csv", header = TRUE, sep = ",")

오류 메시지가 나타납니다.

중복 row.names는 허용되지 않습니다.

첫 번째 열 이름이 문제를 일으키는 것 같습니다. 수동으로 파일을 다운로드하고 파일에서 StartDate이름을 제거하면 R은 파일을 성공적으로 읽고 첫 번째 열 이름을 X. 누군가가 무슨 일인지 말해 줄 수 있습니까? 파일은 (쉼표로 구분 된) csv 파일입니다.


그런 다음 read.table 에 사용 하지 않도록 지시하십시오 row.names.

systems <- read.table("http://getfile.pl?test.csv", 
                      header=TRUE, sep=",", row.names=NULL)

이제 행에 번호가 매겨집니다.

또한 호출이 단순화되도록 이미 인수를 설정 read.csv한 래퍼를 확인하십시오.read.tablesep=','header=TRUE

systems <- read.csv("http://getfile.pl?test.csv", row.names=NULL)

이 관련 질문?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

첫 번째 열 (헤더 없음) 값은 row.names : 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!!

CSV 파일을 열 때이 오류가 발생했으며 필드 중 하나에 쉼표가 포함되어 있습니다. 필드 주위에 따옴표가 있었고, 그 안에 quote = ""가있는 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=",")

이 오류의 또 다른 가능한 이유는 전체 행이 복제 되었기 때문입니다. 이 경우 중복 행을 제거하면 문제가 해결됩니다.


제 경우에는 모든 줄 끝에 쉼표가있었습니다. 그것을 제거함으로써


The answer here (https://stackoverflow.com/a/22408965/2236315) by @adrianoesch should help (e.g., solves "If you know of a solution that does not require the awkward workaround mentioned in your comment (shift the column names, copy the data), that would be great." and "...requiring that the data be copied" proposed by @Frank).

Note that if you open in some text editor, you should see that the number of header fields less than number of columns below the header row. In my case, the data set had a "," missing at the end of the last header field.


It seems the problem can arise from more than one reasons. Following two steps worked when I was having same error.

  1. I saved my file as MS-DOS csv. ( Earlier it was saved in as just csv , excel starter 2010 ). Opened the csv in notepad++. No coma was inconsistent (consistency as described above @Brian).
  2. Noticed I was not using argument sep="," . I used and it worked ( even though that is default argument!)

참고URL : https://stackoverflow.com/questions/8854046/duplicate-row-names-are-not-allowed-error

반응형