2012-02-23 8 views
3
df1=data.frame(c(2,1,2),c(1,2,3,4,5,6),seq(141,170)) #create data.frame 
names(df1) = c("gender","age","height") #column names 
df1$gender <- factor(df1$gender, 
levels=c(1,2), 
labels=c("female","male")) #gives levels and labels to gender 
df1$age <- factor(df1$age, 
levels=c(1,2,3,4,5,6), 
labels=c("16-24","25-34","35-44","45-54","55-64","65+")) # gives levels and labels to age groups 

性別でサブセット化された高さのサマリーを作成して年齢を調べることを検討しています。 'by'を使ってdata.frameに変換したサマリーを変換する

females<-subset(df1,df1$gender==1) #subsetting by gender 
males<-subset(df1,df1$gender==2) 

foutput=by(females$height,females$age,summary) #producing summary subsetted by age 
moutput=by(males$height,males$age,summary) 

は、しかし、私は私がXLconnectを用いて周波数テーブルと一緒にこれらの結果をエクスポートできるようにdata.frameにあるように、それを必要とする:私が欲しいの出力を提供するよう

subsetby機能を使用します。

plyrを使用して出力をdata.frameまたはエレガントなものに変換する方法はありますか?ここで

答えて

4

はplyrを使用して一つのアプローチです:byから

> ddply(df1, c("gender", "age"), function(x) summary(x$height)) 
    gender age Min. 1st Qu. Median Mean 3rd Qu. Max. 
1 female 25-34 142  148 154 154  160 166 
2 female 55-64 145  151 157 157  163 169 
3 male 16-24 141  147 153 153  159 165 
4 male 35-44 143  149 155 155  161 167 
5 male 45-54 144  150 156 156  162 168 
6 male 65+ 146  152 158 158  164 170 
+0

これは理想的です。私はplyrが解決策かもしれないと思った! – BuckyOH

+0

@BuckyO - 使いやすさとさまざまなタスク間の一貫性のためにplyrを破るのは難しいと思う。大規模なデータやグループでパフォーマンスの問題に遭遇するかもしれませんが、大部分の "死の"仕事のために、私はそれがとても良いと感じています。がんばろう! – Chase

+0

ありがとうございました。あなたが言及したパフォーマンスの問題を覚えておきます。 私はより多くのサブセットや他の機能を試してみましたので、この回答を承認しました。 – BuckyOH

2

出力は本当にlistですが、それは理由print.by方法の異なる見えます。

ですから、matrixdo.callrbindの要素を使用し、その上data.frameを呼び出すことができます。

data.frame(do.call(rbind,by(mtcars$hp,mtcars$cyl,summary)),check.names=FALSE) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
4 52 65.5 91.0 82.64 96.0 113 
6 105 110.0 110.0 122.30 123.0 175 
8 150 176.2 192.5 209.20 241.2 335 

注列名の消毒を回避するためにcheck.names引数を使用します。

+0

これは別のデータセットの例ですか? – BuckyOH

+0

@BuckyOはい、これは組み込みのmtcarsデータセットからです。私はIE7を使用しています。 – James

+0

私はチェイスの答えを承認しましたが、私もあなたのものを試してみることはとても有用でした。 – BuckyOH

関連する問題