我试图在数据框的子集内获得比例。例如,在这个组成的数据框中:
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的子集的方法。我还尝试使用以下代码按category1
和category2
分割数据:
splitDF<-split(DF,list(DF$category1,DF$category2))
我希望我可以使用prop.table
的函数来获取每个分组中每只动物的比例,但我无法使prop.table
工作,因为我似乎无法指定要将功能应用于拆分组的数据列。有人有任何提示吗?也许这可以用plyr
或类似的东西来实现?我在帮助论坛中找不到有关在数据子集中获得比例的方法。
答案 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)})));