1

我想要一个堆叠的条形图,或者下面数据的至少两个条形图(直方图)。但我不知道怎么做。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 

但是怎么做?

4

5 回答 5

3

该聚合只是对tableinside of的简单调用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.

于 2010-03-08T17:28:27.500 回答
3

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

library(ggplot2)
qplot(online, data = df, fill = offline)
qplot(offline, data = df, fill = online)
于 2010-03-10T12:14:30.057 回答
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))

替代文字

于 2010-03-08T18:51:51.283 回答
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
于 2010-03-08T18:10:24.380 回答
0

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

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

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

至于绘图部分,我认为lattice或者ggplot可能两者都具有完全按照您想要的功能,但我还是一个 R 新手,所以我不能说更多......

于 2010-03-08T16:46:36.083 回答