处理因素

时间:2011-07-30 18:52:29

标签: r ggplot2

我有一个具有多个级别的因素:

x <- as.factor(c(rep("A",20),rep("B",10),rep("C",15)))

尽可能以最短的方式,我想使用ggplot创建每个因子的%频率的条形图。

我一直发现,当我有一个因素时,在总结和绘图之间会有很多小烦恼。以下是我烦恼的几个例子:

as.data.frame(summary(x)) 

您必须重命名列,并且第一列值现在是最后一个示例中的rownames。在下一个,你必须作弊使用强制转换,然后你必须重新标记,因为它默认为“(所有)”的colname。

as.data.frame(q1$com.preferred)
dat$value <- 1
colnames(dat) <- c("pref", "value")
cast(dat, pref ~.)
colnames(dat)[2] <- "value"

这是另一个例子,有点好,但不太理想。

data.frame(x=names(summary(x)),y=summary(x))

如果在ggplot中有一个快速的方法可以做到这一点,我会非常有兴趣看到它。到目前为止,我最大的问题是将计数改为频率。

3 个答案:

答案 0 :(得分:2)

关注@dirk和@joran的建议(@joran真的很有用。我认为as.data.frame(),而不仅仅是data.frame(),这是必要的,但事实证明@joran是正确的...... < / p>

x <- as.factor(c(rep("A",20),rep("B",10),rep("C",15)))
t1 <- table(x)
t2 <- data.frame(t1)
t3 <- data.frame(prop.table(t1))
qplot(x,Freq,data=t2,geom="bar",ylab="Count")
qplot(x,Freq,data=t3,geom="bar",ylab="Proportion")

修改:稍微缩短(也包含@ Chase的prop.table

答案 1 :(得分:2)

您可以让qplot在没有外部计算的情况下为您完成摘要工作,请尝试以下任何一项:

x <- rep(c('A','B','C'), c(20,10,15))

qplot(x, weight=1/length(x), ylab='Proportion')
qplot(x, weight=100/length(x), ylab='Percent')
qplot(x, weight=1/length(x), ylab='Percent') + scale_y_continuous(formatter='percent')

ggplot(data.frame(x=x),aes(x, weight=1/length(x))) + geom_bar() + ylab('Proportion')

也许有一种方法可以使用ggplot函数中的转换来实现这一点,但我还没有找到它。

答案 2 :(得分:1)

您是否尝试过只调用barplot(table(x)/length(x))的ggplot相当于?即。

R> x <- as.factor(c(rep("A",20),rep("B",10),rep("C",15)))
R> table(x)
x
 A  B  C 
20 10 15 

我们很容易变成百分比

R> table(x)/length(x)*100
x
      A       B       C 
44.4444 22.2222 33.3333 

然后可以绘制

R> barplot(table(x)/length(x)*100)

很好:

enter image description here