[解決済み] Rデータフレームに行を追加する方法
質問
StackOverflowを見回しましたが、私の問題(Rデータフレームに行を追加すること)に特化した解決策が見つかりません。
私は以下のように、空の2列のデータフレームを初期化しています。
df = data.frame(x = numeric(), y = character())
そして、私の目標は、値のリストを繰り返し処理し、各繰り返しにおいて、リストの最後に値を追加することです。私は次のようなコードから始めました。
for (i in 1:10) {
df$x = rbind(df$x, i)
df$y = rbind(df$y, toString(i))
}
また,関数
c
,
append
そして
merge
を使ってもうまくいきません。何か提案があれば教えてください。
コメントからの更新です。 私はRがどのように使用されることを意図しているかを知っていると仮定しませんが、私はすべての反復でインデックスを更新するために必要となる追加のコード行を無視したかったし、私はそれが最終的に何行になるかわからないので、データフレームのサイズを簡単に事前割り当てすることはできません。上記は単に再現可能なおもちゃの例であることを忘れないでください。いずれにせよ、ご提案ありがとうございました。
どのように解決するのですか?
アップデート
あなたが何をしようとしているのか分かりませんが、もう一つ提案をします。各カラムに必要な型のベクトルをあらかじめ割り当てておき、それらのベクトルに値を挿入し、最後に
data.frame
.
続けて、Julianの
f3
(事前に割り当てられた
data.frame
) として定義された、これまでで最も高速なオプションです。
# pre-allocate space
f3 <- function(n){
df <- data.frame(x = numeric(n), y = character(n), stringsAsFactors = FALSE)
for(i in 1:n){
df$x[i] <- i
df$y[i] <- toString(i)
}
df
}
似たような方法ですが、こちらは
data.frame
は最後のステップとして作成されます。
# Use preallocated vectors
f4 <- function(n) {
x <- numeric(n)
y <- character(n)
for (i in 1:n) {
x[i] <- i
y[i] <- i
}
data.frame(x, y, stringsAsFactors=FALSE)
}
microbenchmark
は、quot;microbenchmark" パッケージから取得したものです。
system.time
:
library(microbenchmark)
microbenchmark(f1(1000), f3(1000), f4(1000), times = 5)
# Unit: milliseconds
# expr min lq median uq max neval
# f1(1000) 1024.539618 1029.693877 1045.972666 1055.25931 1112.769176 5
# f3(1000) 149.417636 150.529011 150.827393 151.02230 160.637845 5
# f4(1000) 7.872647 7.892395 7.901151 7.95077 8.049581 5
f1()
(以下のアプローチ) は、信じられないほど非効率です。
data.frame
を頻繁に呼び出すため、また、この方法でオブジェクトを成長させるとRでは一般に遅くなるからです。
f3()
はプレアロケーションによりかなり改善されていますが
data.frame
の構造自体がボトルネックの一部になっている可能性があります。
f4()
は、あなたが取りたいアプローチを損なうことなく、そのボトルネックを回避しようとします。
オリジナルの回答
本当はよくないのですが、この方法でやりたかったのであれば、やってみてもいいかと思います。
for (i in 1:10) {
df <- rbind(df, data.frame(x = i, y = toString(i)))
}
あなたのコードでは、もう一つ問題があることに注意してください。
-
を使用する必要があります。
stringsAsFactors
は、文字が因数に変換されないようにしたい場合に使用します。使用してください。df = data.frame(x = numeric(), y = character(), stringsAsFactors = FALSE)
関連
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Rの再現性のある優れた例題の作り方
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] Bashで標準出力と標準エラーの両方をファイルにリダイレクトして追記する方法
-
[解決済み] データフレームを結合(マージ)する方法(内側、外側、左側、右側)
-
[解決済み] データフレーム列の名前によるドロップ
-
[解決済み】配列に何かを追加する方法は?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ggplot 2.0.0でのポイントサイズ
-
[解決済み] 特定のサイズのプロットウィンドウを作成する
-
[解決済み] xkcd風のグラフを作るには?
-
[解決済み] ベクトル中のxの値を持つ要素の個数を数える
-
[解決済み] data.frameの1つの列の名前を変更する方法は?
-
[解決済み] 先頭と末尾の空白を削除するにはどうしたらよいですか?
-
[解決済み] ベクトル中のある要素のインデックスを求めるR関数はありますか?
-
[解決済み】自作関数を書くときにRの省略機能を使うには?
-
[解決済み】エラー:Rで関数が見つかりませんでした。
-
[解決済み] テーブルをデータフレームに変換する方法