7

データフレームのサブセット内の比率を取得しようとしています。たとえば、この構成されたデータフレームでは次のようになります。

DF<-data.frame(category1=rep(c("A","B"),each=9),
    category2=rep(rep(LETTERS[24:26],each=3),2),
     animal=rep(c("dog","cat","mouse"),6),number=sample(18))

category13匹の動物のそれぞれの割合を組み合わせて計算したいと思いますcategory2(たとえば、「A」と「X」の両方であるすべての動物のうち、犬はどの割合ですか?)。データフレームの列4でprop.table、各行が合計「数値」列を構成する割合を取得できますが、カテゴリ1と2に基づくサブセットに対してこれを行う方法が見つかりませんでした。これcategory1を使用したデータcategory2

splitDF<-split(DF,list(DF$category1,DF$category2))

そして、関数を適用してprop.table各分割グループ内の各動物の比率を取得できることを望んでprop.tableいましたが、分割グループ内で関数を適用するデータの列を指定できないため、作業を開始できません。誰かヒントはありますか?多分これはplyrまたは同様のもので可能ですか?データのサブセットで比率を取得する方法については、ヘルプフォーラムで何も見つかりません。

4

2 に答える 2

6

ddply()ライブラリの関数を使用plyrして、各組み合わせの比率を計算し、データフレームに新しい列を追加できます。

 library(plyr)     
 DF<-ddply(DF,.(category1,category2),transform,prop=number/sum(number))
 DF
   category1 category2 animal number       prop
1          A         X    dog     17 0.44736842
2          A         X    cat      3 0.07894737
3          A         X  mouse     18 0.47368421
4          A         Y    dog      2 0.14285714
于 2013-02-21T18:03:59.480 に答える
3

これにより、目的の出力が生成されますか?

 DF$proportion<-as.vector(unlist(tapply(DF$number,paste(DF$category1,DF$category2,sep="."),FUN=function(x){x/sum(x)})));
于 2013-02-21T18:05:41.290 に答える