2011-05-17 22 views
9

Aşağıdaki virgülle ayrılmış dosyayı göz önünde bulundurun. Satır 3 içerdiğinden, komutKaçınılan tırnak işaretleri içeren alıntılanan metin nasıl okunmalı

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

satır 4 bölümlerine ayrılacaktır ile okumaya çalışırsanız


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

: Kolaylık olması açısından bu bir satır içerir let virgül. Aslında, sadece virgülün kendisini içeren 3 parçayı okumak istiyorum. Orada yardım için bayrak geliyor. Denedim:

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

ama bu hata "incomplete final line found by readTableHeader on table" ile düşer. Bu garip (yedi) alıntı sayısı nedeniyle olur.

read.table()

yanı sıra scan() parametreyi allowEscapes var, ama TRUE ayarlayarak yardımcı olmuyor. Bu ok, help(scan) gelen nedeni okuyabilir:

yorumlanır kaçar kontrol karakterleri '\ a \ b \ f \ n \ r \ t, \ V' in, ... ... başka, karakter ters eğik çizgi

böyle alıntı cSV dosyalarını okumak nasıl önermek Lütfen dahil kendisi olarak kabul edilir kaçan \' tırnak kaçmış içermeyenler.

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

Bu, bir kullanmada vektör tt okumanızı sağlar:

+0

Ne yapmaya çalıştığını anlıyorum ama neden read.csv() kullandığınızı kafam karıştı: Bu bir CSV dosyası değil, birden fazla sütun yok, sadece bir metin bloğu. tırnak. Satırların ayrı mı, yoksa olmadığını mı söylüyorsunuz, neden sadece 'readLines (..., n = 1)' yi kullanmıyorsunuz? Kaçınılmış tırnak işaretleri içeren çok satırlı bir metin olması gerekir. – smci

cevap

5

Bir olasılık, örneğin başka bir şey tarafından tırnak karakteri değiştirerek sonra devam olduğu gibi okunan her şeyi elde etmek readLines() kullanın ve etmektir textConnection

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

değil en güzel çözüm, ancak (eğer ders dışı dosyasında bir yerde bir "karakterini yok ...) işleri

+2

Eğer '\' '' '' 'ile değiştirirseniz, o zaman read.csv' onu kullanır. – Marek

+0

@Marek: Tamamen takip etmiyorum. Doğru çıktı almak için bunu tam olarak nerede değiştirmeliyim? –

+3

Ben tt <- readLines (dosya) demek istiyorum; tt <- gsub ("\\\\ '", "' '", tt); read.csv (textConnection (tt), header = FALSE, quote = "'") çünkü çift tırnaklar doğru okunur (bkz. '? Scan' -> Details -> quotes). – Marek

İlgili konular