代码之家  ›  专栏  ›  技术社区  ›  Alex Holcombe

我怎样才能用一些变量来折叠数据帧,取其他变量的平均值

  •  13
  • Alex Holcombe  · 技术社区  · 16 年前

    我需要通过一些变量来总结数据帧,忽略其他变量。这有时被称为崩溃。例如,如果我有这样一个数据帧:

    Widget Type Energy  
    egg 1 20  
    egg 2 30  
    jap 3 50  
    jap 1 60
    

    然后通过Widget进行折叠,以Energy作为因变量,Energy~Widget,将产生

    Widget Energy  
    egg  25  
    jap  55  
    

    http://alexholcombe.wordpress.com/2009/01/26/summarizing-data-by-combinations-of-variables-with-python/ ),下面是一个R使用doBy库做一些非常相关的事情的例子( http://www.mail-archive.com/r-help@r-project.org/msg02643.html

    3 回复  |  直到 11 年前
        1
  •  15
  •   Jyotirmoy Bhattacharya    16 年前

    使用 aggregate

    > df<-read.table(textConnection('
    + egg 1 20
    + egg 2 30
    + jap 3 50
    + jap 1 60'))
    > aggregate(df$V3,list(df$V1),mean)
      Group.1  x
    1     egg 25
    2     jap 55
    

    要获得更大的灵活性,请查看 tapply plyr 包裹。

    ggplot2 使用 stat_summary

    qplot(V1,V3,data=df,stat="summary",fun.y=mean,geom='bar',width=0.4)
    
        2
  •  5
  •   BlueCoder    14 年前

    对于那些熟悉SQL的人来说,操纵数据帧的另一种方法是sqldf包中的sqldf命令。

    library(sqldf)
    sqldf("SELECT Widget, avg(Energy) FROM yourDataFrame GROUP BY Widget")
    
        3
  •  1
  •   Brian Diggs    14 年前

    @Jyotirmoy提到这可以通过 plyr

    DF <- read.table(text=
    "Widget Type Energy  
    egg 1 20  
    egg 2 30  
    jap 3 50  
    jap 1 60", header=TRUE)
    
    library("plyr")
    ddply(DF, .(Widget), summarise, Energy=mean(Energy))
    

    这给了

    > ddply(DF, .(Widget), summarise, Energy=mean(Energy))
      Widget Energy
    1    egg     25
    2    jap     55