【问题标题】:Creating a percentage table创建百分比表
【发布时间】:2016-03-14 05:28:35
【问题描述】:

我根据数据框中的两列创建了一个基于计数的表。我用过:

data.frame(table(df$State,df$Subset)[,])

有没有办法可以将这些计数转换为每个特定州的百分比?

             S1       S2        S3       S4    S5     S6     S7
NY          195     1296       974     5528  3597    505    282
NJ          172      733       763     3253  3088    315    166
CA           48      552      1087     2073  1212   1149    203

所以不是计数,而是每个特定状态的百分比。所有纽约州的总和将达到 100%,新泽西州、加利福尼亚州等也是如此。

【问题讨论】:

标签: r


【解决方案1】:

不知道评论?prop.table够不够。 prop.table 默认情况下只会给你单元格比例,而要求的是行比例。

tbl <
structure(c(195L, 172L, 48L, 1296L, 733L, 552L, 974L, 763L, 1087L, 
5528L, 3253L, 2073L, 3597L, 3088L, 1212L, 505L, 315L, 1149L, 
282L, 166L, 203L), .Dim = c(3L, 7L), .Dimnames = list(c("NY", 
"NJ", "CA"), c("S1", "S2", "S3", "S4", "S5", "S6", "S7")), class = "table")

比较这两个值:

> prop.table(tbl)
            S1          S2          S3          S4          S5          S6
NY 0.007171491 0.047662830 0.035820676 0.203302563 0.132286418 0.018572322
NJ 0.006325622 0.026957449 0.028060755 0.119635173 0.113566989 0.011584716
CA 0.001765290 0.020300835 0.039976463 0.076238461 0.044573572 0.042256629
            S7
NY 0.010371079
NJ 0.006104961
CA 0.007465706
> prop.table(tbl, margin=1)
            S1          S2          S3          S4          S5          S6
NY 0.015755029 0.104710350 0.078694352 0.446634887 0.290619698 0.040801487
NJ 0.020259128 0.086336867 0.089870436 0.383156655 0.363722026 0.037102473
CA 0.007590133 0.087286528 0.171884883 0.327798861 0.191650854 0.181688805
            S7
NY 0.022784196
NJ 0.019552415
CA 0.032099937

只有第二个是“百分比估计的基础(确实需要乘以 100):

> 100*prop.table(tbl, margin=1)
           S1         S2         S3         S4         S5         S6         S7
NY  1.5755029 10.4710350  7.8694352 44.6634887 29.0619698  4.0801487  2.2784196
NJ  2.0259128  8.6336867  8.9870436 38.3156655 36.3722026  3.7102473  1.9552415
CA  0.7590133  8.7286528 17.1884883 32.7798861 19.1650854 18.1688805  3.2099937

我认为更有用的结果是 round 将这组值保留到小数点后一位。

【讨论】:

  • 试图弄清楚如何使用边距,这很有帮助。谢谢
  • @rawr:我真的不明白你的抱怨。您会得到 margin = 1 的行比例。margin.table 是边际总和,而不是行比例。本质上是rowSums(tbl)
  • 也许是你的衰老,但我的抱怨是关于晦涩难懂的文档,而不是你目前在闲聊的任何东西
  • @rawr:嗯,你的意思是他们用sweep(x, margin, margin.table(x, margin), "/")定义它,我从来没有想过sweep被明确定义,那么也许我同意你的看法。我宁愿希望我的衰老在 10 年后才会明显。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
相关资源
最近更新 更多