問題タブ [plyr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 集計値を元のデータ フレームに結合する
私が何度も使用している設計パターンの 1 つは、データ フレームで「グループ化」または「分割、適用、結合 (SAC)」を実行し、集計されたデータを元のデータに結合することです。これは、たとえば、多数の州と郡を含むデータ フレームで、各郡の州平均からの偏差を計算する場合に役立ちます。私の集計計算が単純な平均にすぎないことはめったにありませんが、良い例になります。私はしばしば次の方法でこの問題を解決します。
これにより、次のような優れた集計データが生成されます。
これは機能しますが、可読性やパフォーマンスなどを向上させる別の方法はありますか?
r - R:データフレームの各行をリストアイテムに変換します
mclapply()
データフレームに対して、他の同様の関数を使用して高速化したい操作がいくつかありlapply()
ます。これに取り組む最も簡単な方法の1つは、データフレームの各行をリスト内の小さなデータフレームにすることです。私はこれをplyr
次のように非常に簡単に行うことができます:
データをリストとして取得すると、次のようなことが簡単にできます。
これは順調に機能しますが、私はかなり多くのデータを持っており、adply()
ステップは非常に遅いです。ステップでマルチコア並列バックエンドを使用してみましたadply
が、8を登録したにもかかわらず、複数のプロセッサを使用することはありませんでした。並列オプションがこのタイプの問題で機能しない可能性があるのではないかと思います。
これを高速化するためのヒントはありますか?たぶんベースRソリューション?
r - plyr アプリケーション、それぞれがデータのサブセットに対応する行列のリストを作成
いくつかの助けを借りて、エッジリスト、別名隣接リストを隣接行列に変換する方法を見つけました。 多数のエッジリストに対してこれを自動化し、結果の隣接行列をリストに入れる方法を学びたいです。
plyr がこれを行うための最良の方法だと思いますが、ループで行う方法を教えてほしい場合は、それにも感謝します。興味深いことに、データはさまざまな学校のソーシャル ネットワークを表しています。
ここに私がこれまでに持っているものがあります:
r - lmList オブジェクトからの RMSE の抽出
lmList オブジェクトから係数を抽出する次のコードがあります。
このコードは正常に動作しています。しかし、これは係数を抽出する効率的な方法ですか?
私の主な質問は、同じ lm.model オブジェクトから RMSE を抽出するにはどうすればよいですか?
r - R:ddplyを使用してデータのサブセットに関数を適用する
ddplyメソッドを使用して、3000本の映画に関するさまざまな情報を含むデータフレームを取得し、各ジャンルの平均グロスを計算しようとしています。私はRを初めて使用し、ここでddplyに関連するすべての質問を読みましたが、それでも正しく理解できないようです。これが私が今持っているものです:
ジャンルごとにグループ化された、映画の各セットの「グロス」列の値の平均をとる関数をどのように作成する必要がありますか?これは簡単な質問のように思えますが、ドキュメントは私には本当に混乱を招き、R構文についてはまだあまり詳しくありません。
これを簡単にするddply以外の方法はありますか?
ありがとう!!
r - 列の各ペアに関数を適用する R 関数はありますか?
多くの場合、データフレーム/マトリックス内の列の各ペアに関数を適用し、結果をマトリックスで返す必要があります。今、私はいつもこれを行うためにループを書いています。たとえば、相関の p 値を含む行列を作成するには、次のように記述します。
これは機能しますが、非常に大きな行列の場合は非常に遅くなります。R でこのための関数を書くことができます (上記のように対称的な結果を想定して、時間を半分に削減することを気にしません)。
または Rcpp を使用した関数:
しかし、どちらも 100 変数のかなり小さなデータセットでも非常に遅いです (Rcpp 関数の方が速いと思いましたが、R と C++ の間の変換には常にコストがかかると思います)。
だから私の質問は:
- これらの関数は単純であるため、これはすでに R のどこかにあると思います
plyr
。これを行う適用または関数はありますか? 私はそれを探しましたが、見つけることができませんでした。 - もしそうなら、それはより速いですか?
r - 要約と ddply を高速化するには?
200 万行、15 列のデータ フレームがあります。これらの列のうち 3 つを ddply でグループ化し (3 つすべてが因子であり、これらの因子の一意の組み合わせが 780,000 あります)、3 つの列の加重平均を取得します (重みはデータ セットで定義されています)。以下はかなり速いです:
問題は、平均の代わりに weighted.mean を使用して集計列を計算したいことです。
同じデータ フレームで次の ddply を試した場合 (注、不変にキャストします)、20 分後に次の処理が終了しません。
この操作は CPU を大量に消費しているように見えますが、RAM をあまり消費しません。
編集:だから私は、加重平均のいくつかのプロパティを利用して少し「チート」し、スライスではなくオブジェクト全体で乗算と除算を行うこの小さな関数を作成することになりました。
次のように実行すると:
優れたパフォーマンスと、やや再利用可能なエレガントなコードが得られます。
r - 長いではなく幅の広いプライヤー出力からどのように要約しますか
データ フレームを複数のデータ セットに分割し、各セットに対して同一の操作を実行する plyr の機能が気に入っています。最良の部分は、適切にラベル付けされたきちんとしたコンパクトな表として結果を表示するときです。each() を使用して一連の計算を 1 行に入れるのが大好きです。ただし、ddply 引数でサマライズ関数を使用すると、出力が破棄され、ラベルが付けられずに長くなる理由がわかりません。私が何を意味するかを見るためにここを見てください。私が間違っていることを教えてもらえますか?私は要約を使用することを好みます。
まず、サンプル データ フレームを設定しましょう。ある調査に 60 人の参加者がいたとします。そのうちの 20 人はおもしろく、20 人は賢く、20 人は親切でした。次に、各科目がスコアを受け取りました。
ここで、3 種類の人それぞれの平均スコア、中央値スコア、最小スコア、および最大スコアを示す表が必要です。
上記の行は、適切なテーブル (3 行 - 各タイプに 1 行、4 列のデータ) を提供するはずです。悲しいかな、数字の列が 1 つしかなく、ラベルが付けられていない長いテーブル全体が表示されます。
上記の行は、私が望むものを提供します。ddply の構文について、私が理解していないことを説明していただけますか。
performance - 「sapply」コマンドを書き直してパフォーマンスを向上させる方法は?
〜1,300,000行と4列の「d」という名前のdata.frameと、〜12,000行と2列の「gc」という名前の別のdata.frameがあります(ただし、以下の小さな例を参照してください)。
「d」は次のようになります。
そして、ここに「gc」があります:
「d」の 1 列目と一致する「gc」のデータを組み込むことで、「d」に 5 列目を追加したいと考えています。今のところ私はsapplyを使用しています。
しかし、実際のデータでは、「非常に長い」時間がかかります(30分以上「system.time()」でコマンドを実行していますが、まだ完了していません)。
これを巧妙な方法で書き直す方法について何か考えがありますか? または、おそらく「並列」オプションを使用してplyrの使用を検討する必要がありますか (コンピューターに 4 つのコアがあります)。このような場合、最適な構文は何でしょうか?
前もって感謝します。