【发布时间】:2015-04-16 11:51:09
【问题描述】:
我有以下代码:
> library(MASS)
> with(bacteria, table(trt, y, week))
, , week = 0
y
trt n y
placebo 2 19
drug 2 12
drug+ 1 14
, , week = 2
y
trt n y
placebo 1 19
drug 2 11
drug+ 1 10
, , week = 4
y
trt n y
placebo 4 14
drug 5 7
drug+ 2 10
, , week = 6
y
trt n y
placebo 1 16
drug 5 6
drug+ 5 7
, , week = 11
y
trt n y
placebo 4 16
drug 4 8
drug+ 4 8
如何获取上表中每一行的行百分比。我尝试了 prop.table() ,它适用于 2 个变量表,但在上面它不会产生正确的行百分比。感谢您的帮助。
编辑: 我试过了:
prop.table(with(bacteria, table(trt, y, week)))
prop.table(with(bacteria, table(trt, y, week)),1)
prop.table(with(bacteria, table(trt, y, week)),2)
prop.table(with(bacteria, table(trt, y, week)),3)
以上都没有给出正确的行百分比,第一个表如下:
y
trt n y
placebo 0.095 0.905
drug 0.143 0.857
drug+ 0.067 0.933
或者,通过上表获得的data.frame中的这些百分比也将是完美的:
> data.frame(with(bacteria, table(trt, y, week)))
trt y week Freq
1 placebo n 0 2
2 drug n 0 2
3 drug+ n 0 1
4 placebo y 0 19
5 drug y 0 12
6 drug+ y 0 14
7 placebo n 2 1
8 drug n 2 2
9 drug+ n 2 1
10 placebo y 2 19
11 drug y 2 11
12 drug+ y 2 10
13 placebo n 4 4
14 drug n 4 5
15 drug+ n 4 2
16 placebo y 4 14
17 drug y 4 7
18 drug+ y 4 10
19 placebo n 6 1
20 drug n 6 5
21 drug+ n 6 5
22 placebo y 6 16
23 drug y 6 6
24 drug+ y 6 7
25 placebo n 11 4
26 drug n 11 4
27 drug+ n 11 4
28 placebo y 11 16
29 drug y 11 8
30 drug+ y 11 8
【问题讨论】:
-
你想要的输出是什么?你对
prop.table做了什么尝试? -
@rnso 我一直在关注 data.frame 的想法。使用 dplyr 和 tidyr,这将是一种方法。
as.data.frame(with(bacteria, table(trt, y, week))) %>% spread(y, Freq) %>% mutate(n = n / (n + y), y = y / (n + y)) %>% split(., .$week) -
@user20650:是的!这是完美的答案。请输入完整答案。谢谢。
-
@rnso 现在您从 user20650 那里得到了最佳解决方案。 :) 我今天学会了如何使用 prop.table。
标签: r