【发布时间】:2012-02-24 21:18:23
【问题描述】:
如果有一个函数可以在同一张表中同时提供计数和列/总体百分比?我可以查看两个表和 reshape2,但看不到这样做的选项。我举个小例子:
数据设置
n <- 100
x <- sample(letters[1:3], n, T)
y <- sample(letters[1:3], n, T)
d <- data.frame(x=x, y=y)
有桌子
这非常笨拙,因为它需要我取消列出并重新组合。
> library(tables)
> (t1 <- tabular(x~y*(n=length), d))
a b c
x n n n
a 13 14 11
b 8 11 13
c 10 12 8
> prop.table(matrix(unlist(t1),3,3), 1)
[,1] [,2] [,3]
[1,] 0.3421053 0.3684211 0.2894737
[2,] 0.2500000 0.3437500 0.4062500
[3,] 0.3333333 0.4000000 0.2666667
使用 Reshape2
这有点容易,但仍然不是一个。
> library(reshape2)
> (t2 <- acast(d, x~y, length))
Using y as value column: use value_var to override.
a b c
a 13 14 11
b 8 11 13
c 10 12 8
> (t3 <- prop.table(t2,1))
a b c
a 0.3421053 0.3684211 0.2894737
b 0.2500000 0.3437500 0.4062500
c 0.3333333 0.4000000 0.2666667
期望的输出
我真正想要的是看起来像这样的输出:
> structure(list(
+ a = data.frame(n=t2[,1], pct=t3[,1]),
+ b = data.frame(n=t2[,2], pct=t3[,2]),
+ c = data.frame(n=t2[,3], pct=t3[,3])),
+ class = 'data.frame',
+ row.names = letters[1:3])
a.n a.pct b.n b.pct c.n c.pct
a 13 0.3421053 14 0.3684211 11 0.2894737
b 8 0.2500000 11 0.3437500 13 0.4062500
c 10 0.3333333 12 0.4000000 8 0.2666667
有没有办法用 R 轻松做到这一点?
【问题讨论】:
-
你得到的是 row-pcts 而不是 prop.table 索引为 1 的 col-pcts
标签: r