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

我想category1通过category2组合计算三种动物中每种动物的比例(例如,在所有同时为“A”和“X”的动物中,狗的比例是多少?)。在prop.table数据框的第 4 列上,我可以得到每行占总“数字”列的比例,但我还没有找到一种方法来为基于类别 1 和 2 的子集执行此操作。我还尝试拆分通过category1category2使用这个数据:

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 回答