중복 된 '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.table
sep=','
header=TRUE
systems <- read.csv("http://getfile.pl?test.csv", row.names=NULL)
이 관련 질문?read.table
은 문제를 설명 하는 문서 의 일부를 지적합니다.
헤더가 있고 첫 번째 행에 열 수보다 필드가 하나 적 으면 입력의 첫 번째 열이 행 이름으로 사용됩니다. 그렇지 않으면 row.names가 누락 된 경우 행에 번호가 매겨집니다.
헤더 행에는 파일의 나머지 부분보다 열이 1 개 적을 수 있으므로 read.table
첫 번째 열이 열 (중복 된 값을 포함 할 수 있음)이 아니라 row.names (모두 고유해야 함)라고 가정합니다. 다음 두 가지 솔루션 중 하나를 사용하여이 문제를 해결할 수 있습니다.
- 소스 파일에서 헤더 행의 앞이나 끝에 구분 기호 (예 :
\t
또는,
)를 추가 하거나, - 데이터에서 후행 구분 기호 제거
선택은 데이터 구조에 따라 다릅니다.
예 :
여기에서 헤더 행은 구분자가 일치하지 않기 때문에 데이터보다 열이 하나 더 적은 것으로 해석됩니다.
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.
- 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).
- 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
'Development Tip' 카테고리의 다른 글
Scala 애플리케이션 구조 (0) | 2020.11.30 |
---|---|
MySQL의 FOR UPDATE 잠금을 사용할 때 정확히 잠긴 것은 무엇입니까? (0) | 2020.11.30 |
MongoDB의 정확한 요소 배열에서 필드 업데이트 (0) | 2020.11.30 |
Node.js에 변수가 정의되어 있는지 어떻게 확인할 수 있습니까? (0) | 2020.11.30 |
중첩 된 사전의 항목에서 Pandas DataFrame 생성 (0) | 2020.11.30 |