缺少类别的百分比 table
percentage table with missing categories
我正在尝试使用 prop.table
和 do.call
的组合来计算 r 中每一列的 0、1、2、3 的百分比。
tblpercent <- function(x){
round(prop.table(table(x)),4)
}
do.call(cbind,lapply(A,tblpercent))
但是,有些列不包含 0-3 的完整集合,例如,数据看起来像 A:
A <- data.frame(matrix(
c(0,1,2,1,2,3,2,2,2,3,3,3,1,1,0,3,3,3),
nrow=6, ncol=3, byrow = TRUE))
它会 return 像这样的错误:
X1 X2 X3
0 0.1667 0.3333 0.1667
1 0.3333 0.3333 0.3333
2 0.1667 0.3333 0.5000
3 0.3333 0.3333 0.1667
我知道错误是由于 X2 中缺少 0,X3 中缺少 1,所以百分比 returned 只包含 3 个字段 -- 是否可以轻松解决这个问题,或者我应该重写整个函数?
正确的输出应该是这样的:
X1 X2 X3
0 0.1667 0.0000 0.1667
1 0.3333 0.3333 0.0000
2 0.1667 0.3333 0.3333
3 0.3333 0.3333 0.5000
我们可以通过在 tblpercent
函数
中指定 levels
使其成为 factor
来解决这个问题
tblpercent <- function(x, Un){
round(prop.table(table(factor(x, levels = Un))),4)
}
Un1 <- sort(unique(unlist(A)))
do.call(cbind, lapply(A, tblpercent, Un= Un1))
# X1 X2 X3
#0 0.1667 0.0000 0.1667
#1 0.3333 0.3333 0.0000
#2 0.1667 0.3333 0.3333
#3 0.3333 0.3333 0.5000
使用 OP 的函数,用 lapply
生成的输出可能有一些缺失的水平,导致每个 list
元素之间的 length
不同。因此,cbind
将无法正常工作。
我正在尝试使用 prop.table
和 do.call
的组合来计算 r 中每一列的 0、1、2、3 的百分比。
tblpercent <- function(x){
round(prop.table(table(x)),4)
}
do.call(cbind,lapply(A,tblpercent))
但是,有些列不包含 0-3 的完整集合,例如,数据看起来像 A:
A <- data.frame(matrix(
c(0,1,2,1,2,3,2,2,2,3,3,3,1,1,0,3,3,3),
nrow=6, ncol=3, byrow = TRUE))
它会 return 像这样的错误:
X1 X2 X3
0 0.1667 0.3333 0.1667
1 0.3333 0.3333 0.3333
2 0.1667 0.3333 0.5000
3 0.3333 0.3333 0.1667
我知道错误是由于 X2 中缺少 0,X3 中缺少 1,所以百分比 returned 只包含 3 个字段 -- 是否可以轻松解决这个问题,或者我应该重写整个函数?
正确的输出应该是这样的:
X1 X2 X3
0 0.1667 0.0000 0.1667
1 0.3333 0.3333 0.0000
2 0.1667 0.3333 0.3333
3 0.3333 0.3333 0.5000
我们可以通过在 tblpercent
函数
levels
使其成为 factor
来解决这个问题
tblpercent <- function(x, Un){
round(prop.table(table(factor(x, levels = Un))),4)
}
Un1 <- sort(unique(unlist(A)))
do.call(cbind, lapply(A, tblpercent, Un= Un1))
# X1 X2 X3
#0 0.1667 0.0000 0.1667
#1 0.3333 0.3333 0.0000
#2 0.1667 0.3333 0.3333
#3 0.3333 0.3333 0.5000
使用 OP 的函数,用 lapply
生成的输出可能有一些缺失的水平,导致每个 list
元素之间的 length
不同。因此,cbind
将无法正常工作。