3

データ フレームを複数のデータ セットに分割し、各セットに対して同一の操作を実行する plyr の機能が気に入っています。最良の部分は、適切にラベル付けされたきちんとしたコンパクトな表として結果を表示するときです。each() を使用して一連の計算を 1 行に入れるのが大好きです。ただし、ddply 引数でサマライズ関数を使用すると、出力が破棄され、ラベルが付けられずに長くなる理由がわかりません。私が何を意味するかを見るためにここを見てください。私が間違っていることを教えてもらえますか?私は要約を使用することを好みます。

まず、サンプル データ フレームを設定しましょう。ある調査に 60 人の参加者がいたとします。そのうちの 20 人はおもしろく、20 人は賢く、20 人は親切でした。次に、各科目がスコアを受け取りました。

type<-rep(c("funny","clever", "nice"),20)
score<-rnorm(60)+10
data<-data.frame(type,score)

ここで、3 種類の人それぞれの平均スコア、中央値スコア、最小スコア、および最大スコアを示す表が必要です。

ddply(data,.(type), summarise, each(mean,median,min,max)(score))

上記の行は、適切なテーブル (3 行 - 各タイプに 1 行、4 列のデータ) を提供するはずです。悲しいかな、数字の列が 1 つしかなく、ラベルが付けられていない長いテーブル全体が表示されます。

ddply(data,.(type), function(jjkk) each(mean,median,min,max)(jjkk$score))

上記の行は、私が望むものを提供します。ddply の構文について、私が理解していないことを説明していただけますか。

4

2 に答える 2

5

次のように、関数を綴ります。

ddply(data,"type", summarise, mean=mean(score),median=median(score),max=max(score),min=min(score))

希望する形式で出力を生成します。

あなたの問題は、意図したとおりに実際に処理されていないeach()ベクトルを返すことだと思います。summarize()

于 2011-03-10T01:35:14.693 に答える
4

うーん...疲れすぎてワンライナーについて考えることreshapeができませんが、トリックを行います:

library(reshape)
library(plyr)
mdtf <- melt(data)
cast(mdtf, type ~ ., each(min, max, mean, median))
    type      min      max      mean   median
1 clever 7.808648 12.08930 10.125563 10.27269
2  funny 8.302777 12.04066  9.941331 10.07333
3   nice 8.442508 11.80132 10.085667 10.07261
于 2011-03-10T01:35:35.100 に答える