C'è un modo per utilizzare read.csv di leggere da un valore di stringa piuttosto che un file in R?

StackOverflow https://stackoverflow.com/questions/3936285

  •  30-09-2019
  •  | 
  •  

Domanda

Sto scrivendo un pacchetto R dove il codice R parla con un'applicazione Java. L'applicazione Java genera una stringa formattata CSV e voglio il codice R per essere in grado di leggere direttamente la stringa e convertirlo in un data.frame.

È stato utile?

Soluzione

Modifica di una risposta vecchia di 7 anni: Per ora, questo è molto più semplici grazie alla tesi text= che è stato aggiunto al read.csv() e simili:

R> data <- read.csv(text="flim,flam
+ 1.2,2.2
+ 77.1,3.14")
R> data
  flim flam
1  1.2 2.20
2 77.1 3.14
R> 

Sì, guarda l'aiuto per textConnection() - molto potente nozione in R è che essenzialmente tutti i lettori (come ad esempio read.table() e le sue varianti) l'accesso questi collegamento oggetto che può essere un file o un URL remoto, o di una tubazione proveniente da un'altra app, o ... una parte di testo, come nel tuo caso.

Lo stesso trucco è usato per i cosiddetti qui documenti:

> lines <- "
+ flim,flam
+ 1.2,2.2
+ 77.1,3.14
+ "
> con <- textConnection(lines)
> data <- read.csv(con)
> close(con)
> data
  flim flam
1  1.2 2.20
2 77.1 3.14
> 

Si noti che questo è un semplice strada per costruire qualcosa, ma è anche costosi a causa della analisi ripetuta di tutti i dati. Ci sono altri modi per ottenere da Java a R, ma questo dovrebbe farti andare in fretta. L'efficienza viene dopo ...

Altri suggerimenti

Si noti che nelle versioni ora correnti di R, non è più necessario il textConnection(), è possibile fare semplicemente questo:

> states.str='"State","Abbreviation"
+ "Alabama","AL"
+ "Alaska","AK"
+ "Arizona","AZ"
+ "Arkansas","AR"
+ "California","CA"'
> read.csv(text=states.str)
       State Abbreviation
1    Alabama           AL
2     Alaska           AK
3    Arizona           AZ
4   Arkansas           AR
5 California           CA

Sì. Ad esempio:

string <- "this,will,be\na,data,frame"
x <- read.csv(con <- textConnection(string), header=FALSE)
close(con)
#> x
#    V1   V2    V3
#1 this will    be
#2    a data frame

Supponiamo di avere un file chiamato tommy.csv (sì, fantasioso, lo so ...), che ha il contenuto di

  

col1 col2 \ n 1 1 \ n 2 2 \ n 3 3

in cui ogni riga è separata da un carattere di escape "\ n".

Questo file può essere letto con l'aiuto di tesi allowEscapes in read.table.

> read.table("tommy.csv", header = TRUE, allowEscapes = TRUE)

  col1 col2
1 col1 col2
2    1    1
3    2    2
4    3    3

Non è perfetto (modificare i nomi delle colonne ...), ma è un inizio.

Questa funzione avvolge la risposta di Dirk in una forma conveniente. E 'brillante per rispondere alle domande su SO, in cui il richiedente ha appena scaricato i dati sullo schermo.

text_to_table <- function(text, ...)
{
   dfr <- read.table(tc <- textConnection(text), ...)
   close(tc)
   dfr
}

Per usarlo, prima copiare i dati su schermo e incollare nel vostro editor di testo.

  

foo bar baz
  1 2
a   3 4 b

Ora avvolgerlo con text_to_table, preventivi ed eventuali altri argomenti per read.table.

text_to_table("foo bar baz
1 2 a
3 4 b", header = TRUE)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top