使用ddply计算组特征

时间:2013-04-02 14:05:00

标签: r aggregate plyr

我有一个与Calculate "group characteristics" without ddply and merge

相关的后续问题

我有一个类似的数据框(如下所示),但试图计算同一类别中其他水果中腐烂水果的百分比。因此,我不应该考虑到有问题的水果本身是否腐烂。每个数据帧有望澄清这一点,所需的结果列纯粹是为了示例目的插入的。

理想情况下,我想使用ddply(沿着ddply(df,。(Fruit),mutate,Perc = sum(Rotten)/ length(Rotten)))。但是,我找不到一种方法来只考虑同一组中其他行的值。我想我可以使用基于相关行的值的if语句组合,但我想知道是否有更优雅的方法来实现这一点?非常感谢,W

    Fruit Rotten Desired_Outcome
1   Apple      1            0.33
2   Apple      1            0.33
3   Apple      0            0.66
4   Apple      0            0.66
5    Pear      1            0.66
6    Pear      1            0.66
7    Pear      1            0.66
8    Pear      0            1.00
9  Cherry      0            0.00
10 Cherry      0            0.00
11 Cherry      0            0.00
12 Banana      1              NA

Fruit=c(rep("Apple",4),rep("Pear",4),rep("Cherry",3),"Banana")
Gender=c(rep("Male",3),rep("Female",3))
Rotten=c(1,1,0,0,1,1,1,0,0,0,0,1)
Desired_Outcome=c(0.33,0.33,0.66,0.66,0.66,0.66,0.66,1,0,0,0,NA)
df=data.frame(Fruit,Rotten,Desired_Outcome)     
df

1 个答案:

答案 0 :(得分:5)

ddply(df, 
      .(Fruit), 
      mutate, 
      Perc = (sum(Rotten) - Rotten)/(length(Rotten)-1))

mutate将按元素运行,因此您可以从总和中减去每行的值。

    Fruit Rotten Desired_Outcome      Perc
1   Apple      1            0.33 0.3333333
2   Apple      1            0.33 0.3333333
3   Apple      0            0.66 0.6666667
4   Apple      0            0.66 0.6666667
5  Banana      1              NA       NaN
6  Cherry      0            0.00 0.0000000
7  Cherry      0            0.00 0.0000000
8  Cherry      0            0.00 0.0000000
9    Pear      1            0.66 0.6666667
10   Pear      1            0.66 0.6666667
11   Pear      1            0.66 0.6666667
12   Pear      0            1.00 1.0000000
相关问题