RコードがJavaアプリケーションと通信するRパッケージを書いています。JavaアプリケーションはCSV形式の文字列を出力しますが、Rコードで文字列を直接読み取ってdata.frameに変換できるようにしたいと思います。
RコードがJavaアプリケーションと通信するRパッケージを書いています。JavaアプリケーションはCSV形式の文字列を出力しますが、Rコードで文字列を直接読み取ってdata.frameに変換できるようにしたいと思います。
回答:
7年前の回答の編集: これまでに、追加された引数のおかげで、これははるかに簡単text=
にread.csv()
なりました。
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>
はい、のヘルプを見てtextConnection()
-非常に強力なRでの概念は、(例えば、本質的すべての読者ということでread.table()
、その変種)はアクセスこれらの接続ファイル、またはリモートのURL、または他のアプリから入ってくるパイプかもしれオブジェクト、または...あなたの場合のようにいくつかのテキスト。
同じトリックがいわゆるヒアドキュメントにも使用されます。
> 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
>
これは何かを構築するための簡単な方法ですが、すべてのデータの解析が繰り返されるため、コストもかかることに注意してください。JavaからRに移行する方法は他にもありますが、これですぐに作業を進めることができます。次に効率が来る...
現在のバージョンのRでは、が不要になっていることに注意してtextConnection()
ください。これを行うだけで可能です。
> 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
はい。例えば:
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
tommy.csvというファイルがあり(そう、想像力に富んでいる、私は知っている...)、次の内容が含まれているとします。
col1 col2 \ n 1 1 \ n 2 2 \ n 3 3
ここで、各行はエスケープ文字「\ n」で区切られています。
このファイルは、のallowEscapes
引数を使用して読み取ることができますread.table
。
> read.table("tommy.csv", header = TRUE, allowEscapes = TRUE)
col1 col2
1 col1 col2
2 1 1
3 2 2
4 3 3
完璧ではありませんが(列名を変更する...)、それは始まりです。
きちんとしたアプローチを使用して、テキスト値を指定するだけです
library(readr)
read_csv(file = "col1, col2\nfoo, 1\nbar, 2")
# A tibble: 2 x 2
col1 col2
<chr> <dbl>
1 foo 1
2 bar 2
この関数は、Dirkの回答を便利な形式にラップします。質問者がデータを画面にダンプしたばかりのSOで質問に答えるのに最適です。
text_to_table <- function(text, ...)
{
dfr <- read.table(tc <- textConnection(text), ...)
close(tc)
dfr
}
これを使用するには、最初に画面上のデータをコピーして、テキストエディタに貼り付けます。
foo bar baz
1 2 a
3 4 b
次にtext_to_table
、それを、引用符およびその他の引数で囲みますread.table
。
text_to_table("foo bar baz
1 2 a
3 4 b", header = TRUE)