1

我有一个与没有 ddply 和合并的情况下计算“组特征”相关的后续问题

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

理想情况下,我想使用 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
4

1 回答 1

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
于 2013-04-02T14:24:14.857 回答