.csv 파일을 R로 읽으려고 할 때 '불완전한 마지막 줄'경고


114

.csv 파일을 R로 읽고 다음 공식을 사용하려고합니다.

pheasant<-read.table(file.choose(),header=TRUE,sep=",")

이 경고 메시지가 나타납니다.

"incomplete final line found by readTableHeader on 'C:\Documents and Settings..."

이 경고의 원인이 될 수 있다고 생각한 몇 가지가 있지만, 불행히도 R에 대해 스스로 문제를 진단 할만큼 충분히 알지 못하기 때문에 다른 사람이 나를 대신해 진단 할 수 있기를 바라며 여기에 게시 할 것이라고 생각했습니다!

  • .csv 파일은 원래 Excel 파일이었는데 .csv 형식으로 저장했습니다.
  • 파일은 세 개의 데이터 열로 구성됩니다.
  • 각 데이터 열의 길이가 다릅니다. 즉, 각 열에 다른 수의 값이 있습니다.
  • 한 번에 두 열의 평균 (정규 분포 / 비정규 분포에 따라 t- 검정 또는 동등 분포 사용)을 비교하고 싶습니다. 열 1 및 열 3 값 테스트 등

어떤 도움이나 제안이라도 진지하게 감사하겠습니다!


1
@Kate : 파일 자체에 링크 해 주시겠습니까? 몇 가지 아이디어가 있지만 파일이 없으면 어떤 문제인지 말하기가 어렵습니다.
Joris Meys

안녕하세요 Joris-어떻게해야할지 모르겠네요, 죄송합니다 ...
Kate

첫 번째 열에는 1045 개의 값이 있고 두 번째 열에는 623 개의 값이 있고 세 번째 열에는 871 개의 값이 있습니다. 그것들은 모두 정수와 반수로 된 숫자 값입니다. 즉, 23, 24.5 등 ...
Kate

1
나는 그것이 문제라고 생각한다. 왜냐하면 read.table은 동일한 columnlength를 가져야하는 데이터 프레임에 데이터를 넣기 때문입니다.
Sir Ksilem

1
@James : 아뇨, 아닙니다. readTableHead (기본 c 함수)는 처음 5 줄을 읽습니다. 거기에서 오류가 발생합니다.
Joris Meys

답변:


134

메시지는 파일의 마지막 줄이 EOL (줄 끝) 문자 (줄 바꿈 ( \n) 또는 캐리지 리턴 + 줄 바꿈 ( \r\n))로 끝나지 않음을 나타냅니다 . 이 메시지의 원래 의도는 파일이 불완전 할 수 있음을 경고하기위한 것입니다. 대부분의 데이터 파일에는 파일의 맨 마지막 문자로 EOL 문자가 있습니다.

해결책은 간단합니다.

  1. 파일 열기
  2. 파일의 맨 마지막 줄로 이동
  3. 해당 줄의 끝에 커서를 놓습니다.
  4. 프레스 return
  5. 파일 저장

2
파일의 마지막 줄이 아닙니다. 그가 읽고있는 머리글입니다. 처음 다섯 줄입니다.
Joris Meys 2011-08-26

@JorisMeys 그러나 오류 메시지는 파일의 마지막 줄을 나타냅니다. 위의 단계를 수행하면 실제로 경고가 제거됩니다.
WorldGov

@WorldGov "불완전한 최종 줄"은 다른 원인으로 인해 나타날 수있는 경고 (오류 아님)입니다. 귀하의 경우에는 최종 EOL이 부족합니다. 귀하의 경우에는 readTableHeader 함수가 마지막 줄을 읽지 않기 때문에 경고를 던질 방법이 없습니다. 따라서 귀하의 문제는 OP의 문제와 동일하지 않습니다.
Joris Meys

20

문제는 해결하기 쉽습니다. 마지막 줄이 비어 있어야하기 때문입니다.

콘텐츠가

line 1,
line2

그것을 변경

line 1,
line2
(empty line here)

오늘 나는 아래 명령을 사용하여 R을 사용하여 JSON 파일을 읽으려고 할 때 이런 종류의 문제를 만났습니다.

json_data<-fromJSON(paste(readLines("json01.json"), collapse=""))

; 위의 방법으로 해결합니다.


1
R API를 호스팅하기 위해 배관공을 사용하여 동일한 문제가 발생했습니다. Warning message: In readLines(file) : incomplete final line found on 'apiAnaheim.R'경고는 끝에 하나의 빈 줄을 추가하여 해결되었습니다. 왜 이런 일이 발생하는지 잘 모르겠습니다.
HoofarLotusX

여기도 마찬가지입니다. 감사.
Megadeth

14

.xls 파일이 아닌 .csv 파일을 선택 하셨나요? .xls 파일을 읽으려고 할 때만 오류를 재현 할 수 있습니다. .csv 파일이나 다른 텍스트 파일을 읽으려고하면 발생한 오류를 다시 만들 수 없습니다.

> Data <- read.table("test.csv",header=T,sep=",")
> Data <- read.table("test.xlsx",header=T,sep=",")
Warning message:
In read.table("test.xlsx", header = T, sep = ",") :
  incomplete final line found by readTableHeader on 'test.xlsx'

readTableHead오류를 제공하는 c- 함수입니다. 데이터 유형을 결정하기 위해 처음 n 줄 (표준 처음 5 개)을 읽으려고합니다. 나머지 데이터는를 사용하여 읽습니다 scan(). 따라서 문제는 파일 형식입니다.

알아내는 한 가지 방법은 작업 디렉토리를 파일이있는 디렉토리로 설정하는 것입니다. 그렇게하면 읽은 파일의 확장자를 볼 수 있습니다. Windows에서는 표준으로 표시되지 않는다는 것을 알고 있으므로 그렇지 않은 동안 csv라고 믿을 수 있습니다.

다음으로해야 할 일은 메모장이나 워드 패드 (또는 다른 편집기)에서 파일을 열고 형식이 내 파일과 동일한 지 확인하는 것입니다 test.csv.

Test1,Test2,Test3
1,1,1
2,2,2
3,3,3
4,4,
5,5,
,6,

이 파일은 다음 데이터 프레임을 제공합니다.

> read.table(testfile,header=T,sep=",")
  Test1 Test2 Test3
1     1     1     1
2     2     2     2
3     3     3     3
4     4     4    NA
5     5     5    NA
6    NA     6    NA

Excel에서 저장 한 csv 형식은 모든 셀을 쉼표로 구분합니다. 빈 셀에는 값이 없습니다. read.table()쉽게 처리 할 수 ​​있으며 빈 셀을 잘 인식합니다.


이것이 Windows 7 환경이라고 가정 할 때 Kate가 바탕 화면이나 폴더 내부에 복사 된 파일을 보면 .csv 파일의 아이콘에 "a"가있는 반면 .xlsx 파일에는 더 보이는 아이콘이 있습니다. 워크 시트처럼. 이것은 파일 유형을 결정하는 빠른 시각적 방법입니다. 아이콘이 클수록 바탕 화면에 저장하면 훨씬 쉽게 볼 수 있습니다. :)
Michelle

7

먼저 파일을 문자형 벡터로 읽으려면 readLines()(와 함께 warn = FALSE)를 사용하십시오 .

그런 다음 text =옵션을 사용하여 벡터를 데이터 프레임으로 읽습니다.read.table()

    pheasant <- read.table( 
        text = readLines(file.choose(), warn = FALSE), 
        header = TRUE,  
        sep = "," 
    )

3

몇 가지 답변이 제공되었지만 아직 실제 수정 사항이 없음을 깨달았습니다.

위에서 언급했듯이 그 이유는 CSV 파일 끝에 "End of line"이 누락 되었기 때문입니다.

실제 수정 프로그램은 Microsoft에서 제공해야하지만 텍스트 편집기로 CSV 파일을 열고 파일 끝에 줄을 추가하는 것입니다 (또는 Enter 키 누르기). ATOM 소프트웨어를 텍스트 / 코드 편집기로 사용하지만 거의 모든 기본 텍스트 편집기가 사용합니다.

그 동안 Microsoft에 버그를보고하십시오.

질문 : 2016 년 사무실 문제인 것 같습니다. 누구든지 PC에 문제가 있습니까?


2

같은 메시지를 받았습니다. 수정 사항은 다음과 같습니다. .csv 파일에서 모든 추가 시트 (탭)를 삭제하고 숫자가 아닌 문자를 제거하고 파일을 쉼표로 구분하여 다시 저장하고 표준 언어를 사용하여 R v 2.15.0에로드했습니다.

파일 이름 <-read.csv ( "filename", header = TRUE)

추가 보호 수단으로 csv를로드하기 전에 소프트웨어를 닫고 다시 열었습니다.


2

다양한 유럽 로케일에서 쉼표 문자가 소수점 역할을하므로 read.csv2 함수를 대신 사용해야합니다.



1

당신이 설명하는 문제는 내가 a .xlsx로 이름을 바꿀 때 나에게 발생했습니다 .csv.

나를 위해 고친 것은 "다른 이름으로 저장"으로 이동 한 다음 .csv다시 저장하는 것이 었 습니다.


1

헤더의 일부로 작은 따옴표가있을 때 한 번이 문제가 발생했습니다. I (즉으로부터 각 열의 헤더 변경을 제거 할 때 Jimmy's data까지 Jimmys data), 함수에는 경고를 반환.


1

R 자체를 통해이 문제를 해결하려면, 난 그냥 사용하는 read.xlsx(..)대신의 read.csv(). 매력처럼 작동 !! 이름을 바꿀 필요도 없습니다. xlsx의 이름을 csv로 바꾸는 것은 실행 가능한 솔루션이 아닙니다.


#Digvijay_Sawant, 마지막 댓글이 의미하는 바는 확실하지 않지만 여기에있는 다른 모든 솔루션과는 달리 (거의 모든 솔루션을 시도했습니다 : 미친 짓!), 귀하의 솔루션 만 작동했습니다.
W Barker

1
@WBarker 원래 질문에서 작성자는 Excel을 csv에 저장 한 다음 읽으려고했습니다. Excel을 csv로 잘 변환하면 데이터 형식, 데이터 손실 등이 발생할 수 있습니다. Excel에서 "파일 끝"을 csv와 다른 형식으로 저장할 수 있으므로 파일이 끝나는 위치를 파악하기 어려울 수 있습니다. 그럼 난 전문가는 그러나 단지 생각 :-) 오전 없습니다
Digvijay Sawant

0

텍스트 랭글러 또는 메모장 ++에서 파일을 열고 형식을 표시합니다 (예 : 보이지 않는 항목을 표시하는 텍스트 랭글러에서). 이렇게하면 새 줄 또는 탭 문자를 볼 수 있습니다. 종종 Excel은 마지막 줄 바꾸기 문자가 아닌 잘못된 위치에 모든 종류의 탭을 추가하지만이를 보려면 기호를 표시해야합니다.


0

내 해결 방법 csv은 텍스트 편집기에서 파일을 열고 마지막 값에서 과도한 쉼표를 제거한 다음 파일을 저장하는 것입니다. 예를 들어 다음 파일의 경우

Test1,Test2,Test3
1,1,1
2,2,2
3,3,3
4,4,
5,5,
,6,,

6 이후의 쉼표를 제거한 다음 파일을 저장하십시오.


0

비슷한 문제가 발생했지만 이것은 일반적인 경고로 보이며 실제로 줄 끝 문자와 관련이 없을 수 있습니다. 제 경우에는 사용중인 파일에 키릴 문자가 포함되어 있기 때문에이 오류가 발생했습니다. 라틴 문자로 바꾸면 오류가 사라졌습니다.


0

텍스트 편집기를 사용하여 새 줄을 삽입하고 위의 최상위 답변에서 권장하는 줄 끝 문자 를 얻는 것과 같은 다른 솔루션을 시도했습니다 . 불행히도 이들 중 어느 것도 작동하지 않았습니다.

마지막으로 작동 않았다 솔루션 나를 위해 매우 간단했다 : 나는 비어있는 새 CSV 파일로 CSV 파일의 내용을 붙여 넣은 복사를 저장하고 문제가 사라졌다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.