我正在尝试在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")
编辑2:我发现这个功能似乎做了我想要的但是我不确定它为什么会起作用。
prop.table(mymat, margin=2)*100
答案 0 :(得分:2)
您可以计算百分比并绘制它吗?
百分比=是/总投票,data['Yes', ]
选择“是”列,colSums
计算每列的总数,因此:
barplot( data['Yes', ]/colSums(data) )
这是你的意思吗?
答案 1 :(得分:2)
假设有两个级别
barplot(x / rep(apply(x, 2, sum),each=2))
img http://i50.tinypic.com/16bzr89.png
> 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)
。