Gibt es eine Möglichkeit read.csv zu verwenden, um von einem String-Wert zu lesen, anstatt eine Datei in R?

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

  •  30-09-2019
  •  | 
  •  

Frage

Ich schreibe ein R-Paket, wo der R-Code spricht mit einer Java-Anwendung. Die Java-Anwendung gibt eine CSV-String und ich möchte, dass die R-Code, um direkt die Zeichenfolge zu lesen und sie in eine data.frame umwandeln.

War es hilfreich?

Lösung

Bearbeiten eine 7jährigen Antwort: Inzwischen ist die viel einfacher dank das text= Argument, das zu read.csv() hinzugefügt wurde und gleich:

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> 

Ja, Blick auf die Hilfe für textConnection() - die sehr mächtig Begriff in R ist, dass im Wesentlichen alle Leser (wie zB read.table() und seine Varianten) Zugang diese Verbindung Objekt die eine Datei sein kann, oder eine Remote-URL oder ein Rohr in einer anderen App kommen, oder ... etwas Text wie in Ihrem Fall.

Der gleiche Trick für so genannte hier Dokumente verwendet wird:

> 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
> 

Beachten Sie, dass dies ein einfach Weg für etwas zu bauen, aber es ist auch teuer aufgrund der wiederholten Parsen aller Daten. Es gibt andere Möglichkeiten von Java zu R zu bekommen, aber das sollte man schnell in Gang bringen. Effizienz als nächstes kommt ...

Andere Tipps

Beachten Sie, dass in nun aktuellen Versionen von R, die Sie nicht mehr die textConnection() benötigen, ist es möglich, dies zu tun einfach:

> 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

Ja. Zum Beispiel:

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

Angenommen, Sie eine Datei namens tommy.csv haben (ja, einfallsreich, ich weiß ...), der hat den Inhalt von

  

col1 Col2 \ n 1 1 \ 2 2 n \ n 3 3

, wobei jede Zeile mit einem Abbruchzeichen getrennt "\ n".

Diese Datei kann mit Hilfe von allowEscapes Argumente in read.table gelesen werden.

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

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

Es ist nicht perfekt (ändern Spaltennamen ...), aber es ist ein Anfang.

Diese Funktion wickelt Dirks Antwort in eine bequeme Form. Es ist einfach brillant für Fragen zu SO beantworten, wo der Fragesteller Bildschirm die Daten nur abgeladen hat.

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

Um es zu nutzen, kopieren Sie bitte zuerst die angezeigten Daten und fügen Sie ihn in Ihren Text-Editor.

  

foo bar baz
  1 2 a
  3 4 b

Jetzt wickeln Sie es mit text_to_table, Zitate und alle anderen Argumente für read.table.

text_to_table("foo bar baz
1 2 a
3 4 b", header = TRUE)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top