的数据帧的子集内计算比例(Calculate proportions within subsets

2019-08-17 02:27发布

我想一个数据帧的子集之内获得的比例。 例如,在这个虚构的数据帧:

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

我想喜欢来计算这三个动物的比例为各category1category2组合(例如,指出都是“A”和“X”所有的动物,有多大比例是狗?)。 随着prop.table上的数据帧的第4列,我可以得到每一行占据总“号码”一栏的比例,但我还没有找到一种方法,基于1类和2我也子集这样做试图通过分割数据category1category2采用这样的:

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

我希望那时我能应用功能与prop.table让每个分割组内每个动物的比例,但我不能让prop.table ,因为我似乎无法指定数据的列应用函数工作到拆分组内。 有没有人有什么建议吗? 也许这是可能的plyr或类似的东西? 我无法找到有关如何数据子集之内获得的比例在帮助论坛什么。

Answer 1:

可以使用函数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


Answer 2:

这确实产生所需输出?

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


文章来源: Calculate proportions within subsets of a data frame
标签: r plyr