我想要一个堆积的条形图,或者下面数据的至少两个条形图(直方图)。但我无法弄清楚如何。情节(在线)不是解决方案,我正在寻找。请参阅下文。
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
但是怎么样?
答案 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))
答案 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
至于绘图部分,我认为lattice
或ggplot
可能都具有完全按照你想要的功能,但我再次成为R新手,所以我不能说更多。 ..