2017-12-27 2 views
2

fread 함수를 사용하여 여러 파일 (csv)을 읽으려고합니다. 하지만 마지막 행에서는 불필요한 데이터가 있으며 오류가 발생하면서 fread를 사용할 수 없습니다.R에서 여러 csv 파일을 읽는 방법 및 fread 함수를 사용하여 마지막 행을 건너 뛰는 방법

코드 :

library(data.table)  
fnames <- list.files("Path",pattern = "^.*Star.*.csv$",full=TRUE) 

    read_data <- function(z){ 
     dat <- fread(z, verbose = TRUE, nrow= -1) 
    } 

    datalist <- lapply(fnames, fread) 

    bigdata <- rbindlist(datalist, use.names = TRUE) 

오류 : WRAPUP 동안

오류 :에서 유형을 검출 할 때 예상 9월 ('')하지만 새로운 라인은, EOF (또는 다른 비 인쇄 문자) 필드 4를 종료 포인트 10 : 2704, IE, N, ENDOFFILEMARKER, 5397786

각 파일의 마지막에 데이터 ENDOFFILEMARKER가있는 행이 있습니다.

참고 : 나는 각 데이터 파일로 FREAD를 사용할 필요가


  • 는 700여 MB입니다. 당신의 CSV 파일을 보지 않고

+1

아마도 [주석] (https://stackoverflow.com/q/36558437/1270695)을 참조하십시오. – A5C1D2H2I1M1N2O1R2T1

+2

현재 일반적인 권장 사항은'fread ("head -n -1 filename.csv")'입니다. – A5C1D2H2I1M1N2O1R2T1

+0

루프로 실행하려면이 코드를 사용할 수 있습니까? – dharma

답변

1

, 가장 좋은 대답을 결정하기가 어렵습니다. 아마도 fread를 사용하여 하나의 파일을 먼저 읽어보십시오. 이 같은이 작동 사용 : filename.csv이 당신의 작업 디렉토리에있는 파일 중 하나의 이름입니다

dat <- fread("grep -v ENDOFFILEMARKER filename.csv") 

합니다. -v는 문자열 ENDOFFILEMARKER를 포함하는 행을 제외한 모든 행을 반환합니다. 하나의 파일로 작업 할 수 있다면 lapply를 사용하여 모든 파일에 유사한 논리를 적용 할 수 있습니다.

나를 위해 일한 또 다른 옵션은 readLines 함수를 사용하는 것입니다. 단점은 readLines 함수가 다소 느리다는 것입니다. 그러나 다른 방법을 찾지 못하면 readLines가 작동합니다. 여기에 하나 개의 파일에 그것을 사용하는 기본적 방법은 다음과 같습니다

length_a <- length(readLines("filename.csv")) 
dt <- fread("filename.csv", nrows = length_a-1) 

당신이 하나 개의 파일에 대한 작업이 있으면, 당신은 모든 파일에 대한 루프와 함께 사용하는 방법을 알아낼 수 있습니다.

나는 마지막 줄을 건너 뛰는 일반적으로 받아 들여지는 방법이지만, 올바르게 작동시키지 못한다는 것을 알고 있습니다.

편집 : Windows를 사용하는 경우, 이것은 당신을 위해 작동 할 수 있습니다 : 당신이 리눅스를 사용하거나 Windows 시스템에 설치된 리눅스 도구를 가지고하는 경우

dat <- fread('findstr /V /C:"ENDOFFILEMARKER" filename.csv') 

그렙가 잘 작동합니다. Windows를 사용하는 경우 findstr 명령은 Linux의 grep 명령과 유사합니다./V는 ENDOFFILEMARKER가 포함 된 줄을 제외한 모든 줄을 반환합니다./C : "... ..."는 공백을 포함하여 여러 단어를 일치 시키거나 정확하게 하나의 단어 만 일치시킬 수 있습니다.

관련 문제