2011-09-09 12 views
6

Non riuscivo a pensare esattamente a cosa avrebbe dovuto essere la domanda, quindi se hai un suggerimento su cosa dovrebbe essere per favore fammelo sapere.Come leggere i dati delimitati da spazi in un frame di dati dal file di script/documento?

Ho visto prima un modo per leggere i dati in un frame di dati che è a schede o spaziatura bianca nel file di script di lavoro. Per esempio:

dat <- SOMETHING(
person1 12 15 
person2 15 18 
person3 20 14 
) 

dici che stai prendendo i dati da un sito web e vogliono solo tavolo un paio di cose, e viene fuori come questo con uno spazio bianco ecc ho potuto aprire un file di testo e salvarlo e poi read.table o simile con csv ma ​​sono sicuro che ho visto i dati letti in questo modo e non posso per la vita di me ricordare come ...

Grazie

risposta

14

il "trucco" è una collegamento testuale come argomento "file" per read.table:

dat <- read.table(textConnection("person1 12 15 
person2 15 18 
person3 20 14"), stringsAsFactors=FALSE 
) 
str(dat) 
'data.frame': 3 obs. of 3 variables: 
$ V1: chr "person1" "person2" "person3" 
$ V2: int 12 15 20 
$ V3: int 15 18 14 

L'argomento predefinito "sep" funziona per la separazione degli spazi bianchi. Se è necessario separare le schede, utilizzare sep = "\ t" (dopo il paren di chiusura dalla chiamata textConnection).

Modifica: questo in realtà è stato incorporato in una successiva revisione della funzione scan sottostante alla quale è stato assegnato un argomento "testo". Il codice può ora essere semplicemente:

dat <- read.table(text="person1 12 15 
    person2 15 18 
    person3 20 14", stringsAsFactors=FALSE 
    ) 

la funzione readLines richiede comunque l'utilizzo di textConnection di leggere da un 'oggetto character', in quanto non utilizza scan.

+0

textConnection! Molto apprezzato. – nzcoops

+0

Questa risposta è un po 'obsoleta, poiché l'argomento di testo per 'scan', che ora viene passato a tutte le funzioni' read. * ', Sostituisce la necessità di' textConnection'. Per qualche ragione i poobah R non hanno aggiunto un argomento di testo a 'readLines', quindi avresti ancora bisogno di' textConnection' per fornire del testo ad esso –

Problemi correlati