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

ijnw1ujt  于 2023-01-18  发布在  其他
关注(0)|答案(5)|浏览(149)

我想要一个堆叠条形图或至少两个条形图(直方图)的数据如下。但我不能找出如何。图(在线)不是解决方案,我正在寻找。请看下面。

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

但是怎么做呢?

ajsxfq5m

ajsxfq5m1#

该聚合只是在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

ivqmmu1c

ivqmmu1c2#

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

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

rvpgvaaj3#

#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))

v8wbuo2f

v8wbuo2f4#

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
axkjgtzd

axkjgtzd5#

我自己还没有这么做过,但是我知道一个R包,很多人用它来把它放到第二个数组中,它叫做reshape
http://www.statmethods.net/management/reshape.html
http://had.co.nz/reshape/introduction.pdf
至于绘图部分,我认为latticeggplot可能都有功能来做你想做的事情,但我还是一个R新手,所以我不能说太多...

相关问题