2012-03-08 11 views
28

Ho difficoltà a ottenere R per leggere un file .txt o .csv che contiene apostrofi.Come leggere un file .csv contenente apostrofi in R?

Alcune delle mie colonne contengono testo descrittivo, ad esempio "Attendi alle esigenze dei clienti" o "Sceriffo dello sceriffo". Il mio file si apre correttamente in Excel (ovvero, tutti i dati vengono visualizzati nelle celle corrette, ci sono 3 colonne e circa 8000 righe e non ci sono dati mancanti). Ma quando chiedo R per leggere il file, questo è ciò che accade:

data <-read.table("datafile.csv", sep=",", header=TRUE) 
    Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : 
    line 520 did not have 3 elements 

(linea 520 è la prima linea che contiene un apostrofo.)

Se vado in file .txt o .csv e rimuovere manualmente tutti gli apostrofi, quindi R legge il file correttamente. Comunque, preferirei mantenere gli apostrofi se posso.

Sono nuovo a R e sarei grato per qualsiasi aiuto.

+0

Sto inviando l'upvoting perché anche se fondamentalmente lo sapevo, una volta ho ottenuto "gotcha'd" durante la lettura in un file csv generato in una macchina di acquisizione dati. all'interno di un blocco di intestazione piuttosto grande, il file aveva alcuni campi con apostophes (un evento inatteso). A volte devi prendere un sguardo attento alla crapola nel file sorgente. –

risposta

31

Per impostazione predefinita, read.table vede virgolette singole e doppie come virgolette. È necessario aggiungere quote="\"" alla chiamata read.table. In alternativa, è possibile utilizzare semplicemente read.csv, che vede solo le virgolette doppie come virgolette per impostazione predefinita.

+1

Grazie per il vostro aiuto. È interessante notare che non ho potuto ottenere nessuna delle opzioni che tu o DWin avete suggerito per read.table per funzionare ... ma read.csv fa il trucco! – user1257313

+0

L'altra differenza con 'read.csv' è che il suo set predefinito è' fill = TRUE' –

8

Studiare a fondo le opzioni in? Read.table ripaga a lungo termine. I valori predefiniti per la citazione dei caratteri sono quote = "\" '", che in realtà sono solo due caratteri dopo che R analizza quella espressione, virgolette singole e virgolette. Puoi rimuoverle entrambe considerando usando quotes=NA. A volte è necessario anche rimuovere "comment.char" in modo predefinito su "#" e potrebbe essere utile cambiare "as.is" su TRUE per impedire che le stringhe vengano convertite in fattori.

+4

Credo che ora dovrebbe essere 'quote = NULL' non' quotes = NA' come della versione più recente. – JayCo

+0

Ho avuto lo stesso problema, ma stavo cercando di importare un elenco che aveva le virgolette che dovevano rimanere nella lista importata. Usando le virgolette = NULL ha funzionato per me (come ha fatto la risposta seguente, quotes = "\\". Apprezzo le risposte effettive invece di "leggi il manuale di aiuto e spero che tu possa trovarlo", quindi grazie. Nel mio caso ho usato> variabile <- read.table ("datafile.txt", quote = NULL) e le virgolette sono passate benissimo –

1

Impostazione del parametro quote = "\\" in read.table dovrebbe fare il trucco

+1

Beh, potrebbe, ma ti rendi conto di quello che farai? –