1. ホーム
  2. list

[解決済み] Rのデータフレームを一行ずつ作成する

2022-05-16 22:22:27

質問

Rでデータフレームを一行ずつ構築したいのですが、いろいろ検索してみたところ、空のリストを作成し、リストのインデックスをスカラーにしておき、毎回一行のデータフレームをリストに追加してリストのインデックスを1つずつ進めるという提案しか出てきません。最後に do.call(rbind,) をリストに追加します。

これは動作しますが、非常に面倒に思えます。同じ目標を達成するためのもっと簡単な方法はないのでしょうか?

明らかに、私はいくつかの apply 関数を使用できず、明示的にデータフレームを一行ずつ作成する必要がある場合を指しています。少なくとも push をリストの末尾に挿入する方法はありますか?

どのように解決するのですか?

行ごとに追加で増やすか、あるいは rbind() .

だからといって、そうすべきとは限りません。 構造を動的に成長させることは、Rでコーディングする上で最も効率の悪い方法の1つです。

もし可能であれば、data.frame全体を前もって割り当てておきましょう。

N <- 1e4  # total number of rows to preallocate--possibly an overestimate

DF <- data.frame(num=rep(NA, N), txt=rep("", N),  # as many cols as you need
                 stringsAsFactors=FALSE)          # you don't know levels yet

そして、操作中に一行ずつ挿入します。

DF[i, ] <- list(1.4, "foo")

これは任意のdata.frameに対して動作し、より効率的です。 もし、Nをオーバーした場合は、最後に空の行を縮小することができます。