【问题标题】:Mean of column based on multiple conditions in R基于R中多个条件的列平均值
【发布时间】:2015-04-11 04:11:12
【问题描述】:

我有一个数据框

DF <- data.frame(y1=c("AG","AG","AI","AI","AG","AI"),
      y0=c(2,2,1,1,2,1),
      y3=c(1994,1996,1997,1999,1994,1994),y4=c("AA","FB","AA","EB","AA","EB"),
      mw3wuus=c(26,34,22,21,65,78),
      Country_true=c("Antigua and  Barbuda","Antigua and  Barbuda","Anguilla","Anguilla","Antigua and  Barbuda","Anguilla"))

 DF
  y1 y0   y3 y4 mw3wuus         Country_true
1 AG  2 1994 AA      26 Antigua and  Barbuda
2 AG  2 1996 FB      34 Antigua and  Barbuda
3 AI  1 1997 AA      22             Anguilla
4 AI  1 1999 EB      21             Anguilla
5 AG  2 1994 AA      65 Antigua and  Barbuda
6 AI  1 1994 EB      78             Anguilla

我正在尝试根据其他列相等的事实创建一个具有平均变量的新列

例如,在示例中,除了第 5 行和第 1 行之外,所有内容都必须相同,为此我需要计算 mw3wuus 的平均值,因为它们对于 y1y0、@ 具有相同的值987654325@和y4

【问题讨论】:

    标签: r rows mean


    【解决方案1】:

    或使用dplyr 包:

    library(dplyr)
    DF %>% group_by(y1,y0,y3,y4) %>% summarise (x = mean(mw3wuus))
    

    【讨论】:

      【解决方案2】:

      使用data.table

      library(data.table)
      setDT(DF)[, Mean := mean(mw3wuus), by = .(y1, y0, y3, y4)][]
      #    y1 y0   y3 y4 mw3wuus         Country_true Mean
      # 1: AG  2 1994 AA      26 Antigua and  Barbuda 45.5
      # 2: AG  2 1996 FB      34 Antigua and  Barbuda 34.0
      # 3: AI  1 1997 AA      22             Anguilla 22.0
      # 4: AI  1 1999 EB      21             Anguilla 21.0
      # 5: AG  2 1994 AA      65 Antigua and  Barbuda 45.5
      # 6: AI  1 1994 EB      78             Anguilla 78.0
      

      【讨论】:

        【解决方案3】:

        你可能想玩aggregate

        例如:

        aggregate(DF$mw3wuus, FUN=mean, 
                  by=list(y1=DF$y1, y0=DF$y0, y3=DF$y3, y4=DF$y4))
        

        会给你:

          y1 y0   y3 y4    x
        1 AG  2 1994 AA 45.5
        2 AI  1 1997 AA 22.0
        3 AI  1 1994 EB 78.0
        4 AI  1 1999 EB 21.0
        5 AG  2 1996 FB 34.0
        

        【讨论】:

        • 我的猜测是 OP 正在寻找 with(DF, ave(mw3wuus, y1, y0, y3, y4, FUN = mean)) 而不是 aggregate...
        • @DavidArenburg 可能......但是如果你想要平均数,为什么要保留重复的行?
        • 因为他们说正在尝试创建一个新列而不是聚合整个数据集,但我可能错了......
        • @DavidArenburg 公平点,让我们看看 OP 怎么说,这一点上的问题并不是特别清楚 :)
        • 工作得很好,我正在寻找管理我的数据以简化它,以汇总我可以使用重复的数据))谢谢大家,现在可以安心睡觉了)
        猜你喜欢
        • 1970-01-01
        • 2018-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-22
        • 2020-03-02
        • 1970-01-01
        • 2018-06-10
        相关资源
        最近更新 更多