【问题标题】:Barplot in R, aggregation of sampled dataR中的条形图,采样数据的聚合
【发布时间】:2010-03-08 16:37:21
【问题描述】:

我想要一个堆叠的条形图,或者下面数据的至少两个条形图(直方图)。但我不知道怎么做。 plot(online) 不是解决方案,我正在寻找。请看下文。

          online              offline
1         sehrwichtig             wichtig
2             wichtig           unwichtig
3         sehrwichtig           unwichtig
4         sehrwichtig         sehrwichtig
5         sehrwichtig         sehrwichtig
6         sehrwichtig           unwichtig
7         sehrwichtig           unwichtig
8             wichtig             wichtig
9             wichtig           unwichtig
10        sehrwichtig         sehrwichtig
11        sehrwichtig             wichtig
12        sehrwichtig           unwichtig
13            wichtig         sehrwichtig
14        sehrwichtig             wichtig

我知道我需要一个步骤,将数据汇总到:

                   online        offline 
   sehrwichtig           6         7 
   unwichtig             0         1 
   wichtig               3         5 

但是怎么做呢?

【问题讨论】:

    标签: r aggregate bar-chart


    【解决方案1】:

    该聚合只是在apply 内部对table 的简单调用:

    R> foo <- data.frame(online=sample(c("S","W","U"),10,TRUE), 
                         offline=sample(c("S","W","U"),10,TRUE))
    R> apply(foo,2,table)
      online offline
    S      3       1
    U      4       5
    W      3       4
    

    你可以输入barplot

    【讨论】:

    • 为了简单起见,我接受了这些解决方案。感谢其他所有人。我学到了很多。
    【解决方案2】:

    使用 ggplot2,您无需预先聚合数据:

    library(ggplot2)
    qplot(online, data = df, fill = offline)
    qplot(offline, data = df, fill = online)
    

    【讨论】:

      【解决方案3】:
      #generate data
      df<- read.table(textConnection('
            online              offline
       sehrwichtig             wichtig
           wichtig           unwichtig
       sehrwichtig           unwichtig
       sehrwichtig         sehrwichtig
       sehrwichtig         sehrwichtig
       sehrwichtig           unwichtig
       sehrwichtig           unwichtig
           wichtig             wichtig
           wichtig           unwichtig
       sehrwichtig         sehrwichtig
       sehrwichtig             wichtig
       sehrwichtig           unwichtig
           wichtig         sehrwichtig
       sehrwichtig             wichtig'
       ),header=T)
      
      #factor levels should be the same
      levels(df$online) <- levels(df$offline)
      
      my_table <- t(aaply(df,2,table))
      
      library(graphics)
      barplot2(my_table,legend = rownames(my_table), ylim = c(0, 20))
      

      【讨论】:

        【解决方案4】:

        Dirk 的答案是要走的路,但在 OP 的数据上,简单的 apply(foo,2,table) 将不起作用——您需要处理 0 条目,可能像这样:

        my.data <- "online              offline
        1         sehrwichtig             wichtig
        2             wichtig           unwichtig
        3         sehrwichtig           unwichtig
        4         sehrwichtig         sehrwichtig
        5         sehrwichtig         sehrwichtig
        6         sehrwichtig           unwichtig
        7         sehrwichtig           unwichtig
        8             wichtig             wichtig
        9             wichtig           unwichtig
        10        sehrwichtig         sehrwichtig
        11        sehrwichtig             wichtig
        12        sehrwichtig           unwichtig
        13            wichtig         sehrwichtig
        14        sehrwichtig             wichtig"
        
        df <- read.table(textConnection(my.data))
        
        df.labels <- unique(as.character(apply(df,2,as.character)))
        tallies <- apply(df,2,function(x)table(x)[df.labels])
        tallies[is.na(tallies)] <- 0
        rownames(tallies) <- df.labels
        

        为简洁起见,您可以合并最后 3 行:

        tallies <- apply(df,2,function(x){y <- table(x)[df.labels];
                                           names(y) <- df.labels; y[is.na(y)] <- 0; y})
        

        输出是:

        > tallies
                    online offline
        sehrwichtig     10       4
        wichtig          4       4
        unwichtig        0       6
        

        【讨论】:

        • 好吧,我需要处理 0 个条目。感谢您的提示。
        【解决方案5】:

        我自己没有这样做,但我知道很多人使用 R 包将其放入那里的第二个数组中。它叫reshape

        http://www.statmethods.net/management/reshape.html

        http://had.co.nz/reshape/introduction.pdf

        至于绘图部分,我认为latticeggplot 可能都具有完全按照您的意愿行事的功能,但我还是一个R 新手,所以我不能多说......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-01-27
          • 2021-02-05
          • 2016-07-08
          • 2018-10-29
          • 2017-08-04
          • 1970-01-01
          • 2020-04-12
          相关资源
          最近更新 更多