你能告诉我如何在three dimensional
表格中获得百分比吗?我知道如何two dimensional
通过运行以下命令在表格中创建百分比
p <-with(mtcars,tapply(carb,list(cyl,vs),length))
prop.table(p,2) # by column
但是,如果我可以尝试添加另一个变量,我不知道该怎么办?
p <- with(mtcars,tapply(carb,list(cyl,vs,gear),length))
你能告诉我如何在three dimensional
表格中获得百分比吗?我知道如何two dimensional
通过运行以下命令在表格中创建百分比
p <-with(mtcars,tapply(carb,list(cyl,vs),length))
prop.table(p,2) # by column
但是,如果我可以尝试添加另一个变量,我不知道该怎么办?
p <- with(mtcars,tapply(carb,list(cyl,vs,gear),length))
您可以为prop.table
函数指定多个级别的输入,其中 1=row、2=column、3=strata 等
简单的例子:
test <- 1:8
dim(test) <- c(2,2,2)
test
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
然后您可以执行以下操作:
# % of all values in each stratum/sub-table
prop.table(test,3)
# row % within each stratum/sub-table
prop.table(test,c(3,1))
# column % within each stratum/sub-table
prop.table(test,c(3,2))
可能有一种简单的方法来处理NA
s,但一个迂回的版本是将它们设置为0
s 然后重置为NA
s:
# set one of the values to NA as an example
test[7] <- NA
# do the procedure
nas <- is.na(test)
test[nas] <- 0
result <- prop.table(test,c(3,2))
result[nas] <- NA
result
, , 1
[,1] [,2]
[1,] 0.3333333 0.4285714
[2,] 0.6666667 0.5714286
, , 2
[,1] [,2]
[1,] 0.4545455 NA
[2,] 0.5454545 1
尝试使用reshape2
和acast
创建您的三维表。这将0
代替NA
那些没有数据的值。
library(reshape2)
tables <- acast(mtcars, cyl~vs~gear,value.var = 'carb', fun.aggregate = 'length')
tables
, , 3
0 1
4 0 1
6 0 2
8 12 0
, , 4
0 1
4 0 8
6 2 2
8 0 0
, , 5
0 1
4 1 1
6 1 0
8 2 0
prop.table(tables, 2:3)
, , 3
0 1
4 0 0.3333333
6 0 0.6666667
8 1 0.0000000
, , 4
0 1
4 0 0.8
6 1 0.2
8 0 0.0
, , 5
0 1
4 0.25 1
6 0.25 0
8 0.50 0
你也可以使用table
而不是你的tapply
电话
with(mtcars,table(cyl, vs ,gear))
, , gear = 3
vs
cyl 0 1
4 0 1
6 0 2
8 12 0
, , gear = 4
vs
cyl 0 1
4 0 8
6 2 2
8 0 0
, , gear = 5
vs
cyl 0 1
4 1 1
6 1 0
8 2 0
然后prop.table
在适当的尺寸上使用