1

我正在尝试在 R 中制作一些条形图。这是我目前所拥有的:在此处输入图像描述

对于这个特定的图表,每个浏览器有多少响应对我来说并不重要,我只想知道每个浏览器的哪个百分比是肯定的,哪个百分比是否定的。

如何转换我正在使用的表格以使用“列百分比”而不是结果数量?有没有办法通过该列的总和来转换每一列?(我对 R 很陌生)谢谢!

编辑:抱歉信息不足。我没有安装任何额外的软件包,只是在 Ubuntu 上安装了 r-base(今天早上安装)。这是 dput 的输出:

structure(c(11L, 32L, 3L, 4L, 1L, 0L, 1L, 1L), .Dim = c(2L, 4L
), .Dimnames = structure(list(c("No", "Yes"), c("Chrome", "Firefox", 
"Internet Explorer", "Safari")), .Names = c("", "")), class = "table")

Edit2:我发现这个功能似乎可以满足我的需求,但我不确定它为什么会起作用。

prop.table(mymat, margin=2)*100
4

2 回答 2

2

你可以计算百分比并绘制它吗?

百分比 = 是/总票数,data['Yes', ] 选择“是”列并colSums计算每列的总数,因此:

barplot( data['Yes', ]/colSums(data) )

在此处输入图像描述

这是你的意思吗?

于 2012-11-22T03:12:44.013 回答
2

假设两个级别

barplot(x / rep(apply(x, 2, sum),each=2))

图像

> apply(x,2,sum)
       Chrome           Firefox Internet Explorer            Safari 
           43                 7                 1                 2 

这是列的边距。它给出了列的总和。现在,如果我们想将 X 除以这些值,它必须以正确的顺序排列。数据按列优先顺序排列,因此当用作除法向量时,apply(x,2,sum)将循环使用错误的元素——如果你愿意,可以转置。

each=2命令中的设置rep将调用结果的一个元素应用于apply每一列(通过复制元素)。因此假设层数为 2。

对于更通用的解决方案,您可以使用each=nrows(x).

于 2012-11-22T03:17:21.163 回答