[r] .csv 파일을 R로 읽으려고 할 때 ‘불완전한 마지막 줄’경고

.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 값 테스트 등

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



답변

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

해결책은 간단합니다.

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

답변

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

콘텐츠가

line 1,
line2

그것을 변경

line 1,
line2
(empty line here)

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

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

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


답변

.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()쉽게 처리 할 수 ​​있으며 빈 셀을 잘 인식합니다.


답변

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

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

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


답변

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

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

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

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

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


답변

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

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

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


답변

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