私はRが比較的新しいので、plyrパッケージからddply &の要約を使用しようとしています。 This postほとんど、私の質問には全く答えていません。私はいくつかの追加の説明/明確化を使用することができます。関数内でddplyを使用し、関心のある変数を引数として取り入れます。
私の問題:
私は与えられた変数のために、グループによって、記述統計を要約する簡単な関数を作成したいです。リンクされたポストとは違って、関数の引数として関心のある変数を含めたいと思います。すでにこのサイトで議論されているように、これは動作します:
require(plyr)
ddply(mtcars, ~ cyl, summarise,
mean = mean(hp),
sd = sd(hp),
min = min(hp),
max = max(hp)
)
しかし、これはしていません:
descriptives_by_group <- function(dataset, group, x)
{
ddply(dataset, ~ group, summarise,
mean = mean(x),
sd = sd(x),
min = min(x),
max = max(x)
)
}
descriptives_by_group(mtcars, cyl, hp)
をので、私は働いていると、私はできるようにしたいデータの量の私に関心のある変数、データセットと変数のグループ化を指定できるようにする関数を持っています。
私は問題を解決するためにhereが見つかったさまざまな解決策を編集しようとしましたが、コードを正常に実行するのに十分理解していません。
元のポスターには、以下の例のデータセットを使用し:所望の出力と
a = c(1,2,3,4)
b = c(0,0,1,1)
c = c(5,6,7,8)
df = data.frame(a,b,c)
sv = c("b")
を:
b Ave
1 0 1.5
2 1 3.5
そしてハドリーによって承認溶液であった:
myFunction <- function(x, y){
NewColName <- "a"
z <- ddply(x, y, .fun = function(xx,col){
c(Ave = mean(xx[,col],na.rm=TRUE))},
NewColName)
return(z)
}
myFunction(df, sv)
戻ります所望の出力。
基本的な仕組みをよりよく理解することで、コードを変更して関数に引数を渡すことができるかどうかを確認するためにコードを分割してみましたたとえば、 "NewColName"(情報を取得する変数)です。しかし、私は成功していません。私の難しさは、(xx[,col])
で何が起きているのか分かりません。私は平均(xx [、col])は、データフレームxx
のインデックスcol
の列の平均をとるべきであることを知っています。しかし、私は無名関数がそれらの値をどこから読んでいるのか分かりません。
誰かがこれを解析するのを手伝ってもらえますか?私は非常に反復的なコードやサブセットを使って簡単に達成できる簡単な作業で数時間を無駄にしましたが、スクリプトをよりシンプルでエレガントにしようとしていました。その解決策。
PS私はpsychパッケージからdescribeBy関数を調べましたが、私が知る限り、値を返す変数を指定することはできず、結果的に問題は解決しません。
「私は確信しています立つ。 'ddply'は、グループ化変数の文字ベクトルを受け取ります。 'ddply(data、c( 'var1'、 'var2')、...)のように。 – joran
また、 'colwise'を見てください – hadley
問題は' summarize'に渡される第3引数を得ていました。 –