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

时间:2010-03-08 16:37:22

标签: r aggregate bar-chart

我想要一个堆积的条形图,或者下面数据的至少两个条形图(直方图)。但我无法弄清楚如何。情节(在线)不是解决方案,我正在寻找。请参阅下文。

          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 个答案:

答案 0 :(得分:3)

该汇总只是对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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

#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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

我自己没有这样做,但是我知道很多人使用的R包用于将它放在第二个数组中的步骤。它被称为reshape

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

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

至于绘图部分,我认为latticeggplot可能都具有完全按照你想要的功能,但我再次成为R新手,所以我不能说更多。 ..