문제

쉼표로 구분 된 다음 파일을 고려하십시오.단순화를 위해 한 줄을 포함 시키십시오:


'I am quoted','so, can use comma inside - it is not separator here','but can\'t use escaped quote :=('

명령으로 읽으려고 하면

table <- read.csv(filename, header=FALSE)

선은 3 개의 쉼표를 포함하기 때문에 선은 4 개의 부분으로 분리됩니다.사실 나는 단지 3 개의 부분 만 읽고 싶어하는데,그 중 하나는 쉼표 자체를 포함하고 있습니다.이 견적 플래그는 도움을 온다.나는 시도했다:

table <- read.csv(filename, header=FALSE, quote="'")

그러나 그것은 오류와 함께 떨어집니다 "incomplete final line found by readTableHeader on table".그것은 홀수(7)수의 따옴표 때문에 발생합니다.

read.table() 또한 scan() 모수가 있으십시오 allowEscapes,하지만 그것을 설정 TRUE 도움이되지 않습니다.그것은 괜찮습니다,원인 help(scan) 당신은 읽을 수 있습니다:

해석되는 이스케이프는 컨트롤 문자입니다 '\a\b,\f, , ,\v',......다른 탈출 문자는 백슬래시를 포함하여 그 자체로 처리됩니다

이스케이프 된 파일을 포함하는 인용 된 파일을 어떻게 읽을 수 있는지 제안하십시오 \' 따옴표.

도움이 되었습니까?

해결책

한 가지 가능성은 readLines() 모든 것을 그대로 읽어내고,인용문 문자를 다른 것으로 대체하여 진행합니다. :

tt <- readLines("F:/temp/test.txt")
tt <- gsub("([^\\]|^)'","\\1\"",tt) # replace ' by "
tt <- gsub("\\\\","\\",tt) # get rid of the double escape due to readLines

이것은 당신이 사용하는 벡터를 읽을 수 있습니다 textConnection

zz <- textConnection(tt)
read.csv(zz,header=F,quote="\"") # give text input
close(zz)

가장 아름다운 솔루션은 아니지만 작동합니다(파일 어딘가에"문자"가 없으면 작동합니다...)

다른 팁

read_delim 패키지에서 읽기 인수를 사용하여 이스케이프 된 따옴표를 처리 할 수 있습니다 escape_double 그리고 escape_backslash.

read_delim(file, delim=',', escape_double=FALSE, escape_backslash=TRUE, quote="'")

(참고 이전 버전의 읽기 전용 헤더에서 인용된 줄 바꿈을 올바르게 지원하지 않습니다: https://github.com/tidyverse/readr/issues/784)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top