计算数据框子集内的比例

时间:2013-02-21 17:52:32

标签: r plyr

我试图在数据框的子集内获得比例。例如,在这个组成的数据框中:

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))

我想通过category1组合计算每个category2的三只动物的比例(例如,所有同时为“A”和“X”的动物,比例是狗?)。对于数据框第4列的prop.table,我可以得到每一行构成总“数”列的比例,但我还没有找到基于类别1和2的子集的方法。我还尝试使用以下代码按category1category2分割数据:

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

我希望我可以使用prop.table的函数来获取每个分组中每只动物的比例,但我无法使prop.table工作,因为我似乎无法指定要将功能应用于拆分组的数据列。有人有任何提示吗?也许这可以用plyr或类似的东西来实现?我在帮助论坛中找不到有关在数据子集中获得比例的方法。

2 个答案:

答案 0 :(得分:7)

您可以使用库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

答案 1 :(得分:3)

这会产生您想要的输出吗?

 DF$proportion<-as.vector(unlist(tapply(DF$number,paste(DF$category1,DF$category2,sep="."),FUN=function(x){x/sum(x)})));