【问题标题】:Calculate group characteristics with ddply使用 ddply 计算组特征
【发布时间】:2013-04-02 14:04:59
【问题描述】:

我有一个与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

【问题讨论】:

  • 非常感谢。有点愚蠢,我没有想到这一点。非常感谢您向我指出这一点。
  • 您在问题上留下了 another 评论,而不是 Justin 的回答(我是 joran,顺便说一句,不是 Justin),这一事实让我相信您确实需要花点时间让自己对这个网站如何运作的一些基本机制不感到困惑。它将帮助您获得帮助,因为目前贾斯汀不知道您正在尝试与他交谈。
  • 道歉 - 我打算在写完评论后立即删除。感谢指导 - 将阅读常见问题解答

标签: r aggregate plyr


【解决方案1】:
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

【讨论】:

  • 这是非常有用的解决方案。我在寻找一个非常相似的问题的解决方案时遇到了。您愿意解释一下为什么建议的语法使用.(Fruit) 吗?我最初的想法是,根据手册建议将data.frame 拆分为ddply,语法将是.variables = c("Fruit")
  • 查看 . 函数的帮助 ?plyr::. 它可以让您“捕获变量的名称,而不是它们的当前值”。
猜你喜欢
  • 1970-01-01
  • 2013-03-06
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
相关资源
最近更新 更多