【问题标题】:Percentage of Column in Table表中列的百分比
【发布时间】:2012-11-22 02:57:17
【问题描述】:

我正在尝试在 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

【问题讨论】:

  • 您可以先提供一个可重现的示例:stackoverflow.com/questions/5963269/…
  • 您正在使用的表?它是什么样子的?你可以从plyraggregate 尝试类似ddply 的东西。基本上将每个计数除以每个组中的计数总和。
  • 我明白我想要做什么,我只是不知道如何以这种方式操作表格。我一直在玩函数,可能会写一些东西来做,但我想必须有一个更简单的方法。

标签: r


【解决方案1】:

假设有两个层次

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) 将循环使用错误的元素——如果您愿意,可以转置。

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

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

【讨论】:

  • 马特,你能解释一下为什么会这样吗?我了解各个部分,但不了解它们是如何组合在一起的。谢谢
  • 在@mathematical.coffee 的回答中, colSums(x) 可以替换 apply(x,2,sum) 调用。
【解决方案2】:

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

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

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

这是你的意思吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    相关资源
    最近更新 更多