dplyrは、それぞれの変数をリストアップすることなく、複数の変数を要約することができますか?[重複].
2023-10-04 14:58:41
質問
dplyrは驚くほど高速ですが、私は何かを見逃しているのでしょうか:複数の変数にわたって要約することが可能です。 例えば
library(dplyr)
library(reshape2)
(df=dput(structure(list(sex = structure(c(1L, 1L, 2L, 2L), .Label = c("boy",
"girl"), class = "factor"), age = c(52L, 58L, 40L, 62L), bmi = c(25L,
23L, 30L, 26L), chol = c(187L, 220L, 190L, 204L)), .Names = c("sex",
"age", "bmi", "chol"), row.names = c(NA, -4L), class = "data.frame")))
sex age bmi chol
1 boy 52 25 187
2 boy 58 23 220
3 girl 40 30 190
4 girl 62 26 204
dg=group_by(df,sex)
この小さなデータフレームを使えば、次のように簡単に書くことができます。
summarise(dg,mean(age),mean(bmi),mean(chol))
そして、欲しいものを手に入れるために、溶かして、手段を手に入れて、次のようなディキャストをすることができることを知っています。
dm=melt(df, id.var='sex')
dmg=group_by(dm, sex, variable);
x=summarise(dmg, means=mean(value))
dcast(x, sex~variable)
しかし、もし私が>20の変数と非常に多くの行を持っている場合はどうなりますか。 グループ化されたデータフレーム内のすべての変数の平均を取ることができるような、data.tableの.SDに似たものはありますか? または、グループ化されたデータフレームでどうにかしてlapplyを使用することは可能でしょうか?
どんな助けでもありがとうございます。
どのように解決するのですか?
この
data.table
という熟語は
lapply(.SD, mean)
である。
DT <- data.table(df)
DT[, lapply(.SD, mean), by = sex]
# sex age bmi chol
# 1: boy 55 24 203.5
# 2: girl 51 28 197.0
がよくわからないのですが
dplyr
というイディオムがありますが、次のようなことができます。
dg <- group_by(df, sex)
# the names of the columns you want to summarize
cols <- names(dg)[-1]
# the dots component of your call to summarise
dots <- sapply(cols ,function(x) substitute(mean(x), list(x=as.name(x))))
do.call(summarise, c(list(.data=dg), dots))
# Source: local data frame [2 x 4]
# sex age bmi chol
# 1 boy 55 24 203.5
# 2 girl 51 28 197.0
なお、githubの課題として
#178
を効率的に実装するために
plyr
イディオム
colwise
で
dplyr
.
関連
-
RStudio の "plot.new() : figure margins too large" 問題を解決する。
-
R言語のエラーメッセージと関連する解決策
-
R plot.new() のエラー : 図形の余白が大きすぎる
-
R言語 - マトリックス
-
[解決済み] 統計的最頻値の求め方は?
-
[解決済み] なぜ `[`] は `subset` よりも優れているのですか?
-
[解決済み] Rで文字列から最後のn文字を抽出する
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み】R関数でオプション引数を指定する "正しい "方法
-
[解決済み】ifelse()でDateオブジェクトがnumericオブジェクトにならないようにする方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
8.2 カマグラ(No.31〜No.40)
-
DEG解析で'row.names'に重複した名前を付けられない場合の解決法
-
R言語における共通関数
-
[解決済み] HTML、PDF、DOCXで見栄えのするシンプルな手動のRMarkdownテーブル
-
[解決済み] ggplot2 の軸ラベルを回転させ、間隔を空ける
-
[解決済み] ggplotで凡例のタイトルを変更する方法
-
[解決済み] データフレーム内のランダムな行をサンプリングする
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み] 複数の変数をグループごとに集計/要約する(例:合計、平均)。
-
[解決済み] dplyrで複数列のサマリーを作成する?重複