代码之家  ›  专栏  ›  技术社区  ›  Felix

R中的条形图,采样数据的聚合

  •  1
  • Felix  · 技术社区  · 16 年前

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

              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 
    

    5 回复  |  直到 10 年前
        1
  •  3
  •   Dirk is no longer here    16 年前

    这种聚合只是对 table apply

    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
  •  3
  •   Collin    16 年前

    library(ggplot2)
    qplot(online, data = df, fill = offline)
    qplot(offline, data = df, fill = online)
    
        3
  •  2
  •   Community Mohan Dere    9 年前
    #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))
    

    alt text

        4
  •  1
  •   Leo Alekseyev    16 年前

    德克的答案是正确的,但在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
    
        5
  •  0
  •   rescdsk    16 年前

    我自己也没有做过,但是我知道很多人在把R包放到第二个数组的时候会用到它。它叫 reshape :

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

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

    至于策划部分,我认为 lattice ggplot 可能两者都有功能做你想做的,但我是一个R新手,所以我不能说更多。。。