38

Stack OverflowでRに関する質問に答えようとすると、例として示したデータの再構築にかなりの時間が費やされます(質問の作成者がRコードとして提供できるほど優れている場合を除く)。

だから私の質問は、誰かが質問をして、彼のサンプルデータフレームを次のように与える場合です:

a  b   c
1 11 foo
2 12 bar
3 13 baz
4 14 bar
5 15 foo

data.frame()命令全体を入力しなくても、これをRセッションに簡単にインポートするためのヒントや機能はありますか?

ヒントを事前に感謝します!

PS:質問のタイトルで「クエリ」という用語があまり良くない場合は申し訳ありませんが、スタックオーバーフローの質問のタイトルで「質問」という単語を使用できないようです:-)

4

4 に答える 4

25

多分textConnection()あなたがここで欲しいものです:

R> zz <- read.table(textConnection("a  b   c
1 11 foo
2 12 bar
3 13 baz
4 14 bar
5 15 foo"), header=TRUE)
R> zz
  a  b   c
1 1 11 foo
2 2 12 bar
3 3 13 baz
4 4 14 bar
5 5 15 foo
R> 

それはあなたが読むための「つながり」としてテキストを扱うことを可能にします。コピーして貼り付けることもできますが、クリップボードからのアクセスはオペレーティングシステムに依存するため、移植性が低くなります。

于 2012-06-01T11:21:58.717 に答える
23

textConnection最近のバージョンのRは、 read.tableやfriendsに列データを入力するためのルートよりもさらに低いキーストロークオプションを提供するようになりました。これに直面しました:

zz
  a  b   c
1 1 11 foo
2 2 12 bar
3 3 13 baz
4 4 14 bar
5 5 15 foo

<- read.table(text="の後に:を挿入zzし、キャリッジリターンを削除して", header=TRUE)から、最後の後に挿入してfoo[Enter]と入力するだけです。

zz<- read.table(text="  a  b   c
1 1 11 foo
2 2 12 bar
3 3 13 baz
4 4 14 bar
5 5 15 foo", header=TRUE)

scan純粋な数値または純粋な文字ベクトルエントリの長いシーケンスを効率的に入力するためにも使用できます。直面している:67 75 44 25 99 37 6 96 77 21 31 41 5 52 13 46 14 70100 18、単純に次のように入力できます:zz <- scan()そして[Enter]を押します。次に、選択した番号を貼り付けて、もう一度[Enter]キーを押すと、2回のキャリッジリターンが発生し、コンソールは「20項目を読み取ります」と応答するはずです。

> zz <- scan()
1: 67  75  44  25  99  37   6  96  77  21  31  41   5  52  13  46  14  70 100  18
21: 
Read 20 items

「キャラクター」タスク。コンソールに貼り付け、無関係な改行を編集して引用符を追加した後、[Enter]キーを押します。

> countries <- scan(what="character")
1:     'republic of congo'
2:     'republic of the congo'
3:     'congo, republic of the'
4:     'congo, republic'
5: 'democratic republic of the congo'
6: 'congo, democratic republic of the'
7: 'dem rep of the congo'
8: 
Read 7 items
于 2012-06-01T13:02:21.853 に答える
13

また、質問者に、Rにコピーして貼り付けることができる方法で任意のデータ構造をダンプする関数を使用するように依頼することもできますdput

> zz
  a  b   c
1 1 11 foo
2 2 12 bar
3 3 13 baz
4 4 14 bar
5 5 15 foo

> dput(zz)
structure(list(a = 1:5, b = 11:15, c = structure(c(3L, 1L, 2L, 
1L, 3L), .Label = c("bar", "baz", "foo"), class = "factor")), .Names = c("a", 
"b", "c"), class = "data.frame", row.names = c(NA, -5L))

> xx <- structure(list(a = 1:5, b = 11:15, c = structure(c(3L, 1L, 2L, 
+ 1L, 3L), .Label = c("bar", "baz", "foo"), class = "factor")), .Names = c("a", 
+ "b", "c"), class = "data.frame", row.names = c(NA, -5L))
> xx
  a  b   c
1 1 11 foo
2 2 12 bar
3 3 13 baz
4 4 14 bar
5 5 15 foo
于 2012-06-01T11:27:41.043 に答える
4

これを追加したいのは、今では定期的に使用していて、非常に便利だと思うからです。コピーされたデータフレームを読み取る機能を持つパッケージオーバーフロー(以下のインストール手順)があります。次のようなデータを含むが出力がないSO投稿から始めたとしdputます。

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

そのデータを直接コピーして、次のコマンドを実行すると、

library(overflow)
soread()
# data.frame “mydf” created in your workspace
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa
# 3          4.7         3.2          1.3         0.2  setosa
# 4          4.6         3.1          1.5         0.2  setosa
# 5          5.0         3.6          1.4         0.2  setosa
# 6          5.4         3.9          1.7         0.4  setosa

これで、グローバル環境でコピーしたものと同じ名前のデータフレームがmydfできたので、OPがデータフレームのを投稿するのを待つ必要はありませんdput。引数を使用してデータフレームの名前を変更できます。out引数は(明らかに)デフォルトでmydf。パッケージ内のSO投稿を操作するためのその他の便利な機能もいくつかあります(sopkgs()たとえば、パッケージを一時的にインストールして、以前にインストールしていないパッケージに関する質問に役立てることができます)。

を残しておくlibrary(overflow)と、.RprofileSOsoread()投稿からデータをインポートする作業が非常に速くなります。

オーバーフローはGitHubから入手でき、

library(devtools)
install_github("overflow", "sebastian-c")
于 2014-12-18T16:42:32.157 に答える