【问题标题】:Average of values in columns in dataframe?数据框中列的平均值?
【发布时间】:2013-12-15 06:56:27
【问题描述】:

我想在值的数据框中找到平均值。例如,如果我有以下数据:

ID Value Status
1   10     A
2   15     B
3   20     A

我想找到所有状态为 A 的值的平均值。我该怎么做?

这是我的尝试:

dataframe$balance.mean(dataframe$status == 'A')

但我不断收到一条错误消息,上面写着Error: attempt to apply non-function。谁能帮我吗?谢谢!

【问题讨论】:

    标签: r dataframe mean


    【解决方案1】:

    如果我清楚地理解了您的要求,以下应该满足您的要求:

     id<-c(1,2,3)
     val<-c(10,15,20)
     sta<-c("A","B","A")
    
     df<-data.frame(id,val,sta)
    
     mean(df$val[df$sta=="A"])
    

    【讨论】:

    • +1,使用with可以在没有太多$s的情况下更清楚:with(df, mean(val[sta=="A"]))
    • 更具可读性(可争论)可以是:with(subset(df, sta == "A"), mean(val))
    【解决方案2】:

    记住() 用于函数调用,[] 用于子集。您现在正在调用一个函数,而实际上没有函数,并给出您看到的错误消息。

    在更一般的意义上,我喜欢使用plyr,尽管data.table 是一个很棒的其他选项。

    library(plyr)
    ddply(dataframe, .(Status), summarize, mean_value = mean(Value))
    

    这将为您生成一个新的data.frame,其中每个唯一值Status 的平均值为Value

    【讨论】:

      【解决方案3】:

      正如@PaulHiemstra 所暗示的,有一个干净的data.table 解决方案是:

      library(data.table)
      DT[Status=="A", mean(val)]
      

      在哪里DT &lt;- as.data.table(your_data_frame)


      或者您可以设置键以获得更快的结果:

      setkey(DT, "status")
      # this will produce a data.table, not a single 
      DT["A", mean(val)]
      # This produces a single number
      DT["A"] [, mean(val)]
      

      【讨论】:

        猜你喜欢
        • 2019-01-20
        • 2018-01-03
        • 1970-01-01
        • 1970-01-01
        • 2014-06-03
        • 2016-03-03
        • 1970-01-01
        相关资源
        最近更新 更多