1

format用来创建可读的平面表ftable是不够的。需要注意的是,在使用该prop.table函数计算列频率时,NA会打印值,因为NA这会导致混乱和可读性低。

如何修改如下代码以使用空格或句点打印NA或值?NaN我考虑使用该sub函数,但我认为如果列名包含这些字符值,它会很混乱并且容易出错。

x <- sample(c(1, 2, 3), 100, replace=TRUE)
y <- sample(factor(c(1, 2), levels=1:3), 100, replace=TRUE)
t <- table(x,y)
p <- prop.table(t, margin=2)
o <- structure(
  paste(format(t), '(', format(round(100*p)), '%)'),
  dim=dim(t),
  dimnames=dimnames(t)
)

这是给出的示例输出:

> o
   y
x   1             2             3            
  1 "20 (  38 %)" "21 (  44 %)" " 0 ( NaN %)"
  2 "20 (  38 %)" "16 (  33 %)" " 0 ( NaN %)"
  3 "12 (  23 %)" "11 (  23 %)" " 0 ( NaN %)"
4

2 回答 2

1
x <- sample(c(1, 2, 3), 100, replace=TRUE)
 y <- sample(factor(c(1, 2), levels=1:3), 100, replace=TRUE)
 t <- table(x,y)
 p <- prop.table(t, margin=2)
 p <- round(100*p,digits=0)
 p[is.na(p) ] <- " "
 o <- structure(
    paste(format(t), '(', format(p), '%)'),
    dim=dim(t),
    dimnames=dimnames(t)
  )
 o
#-------------------------
   y
x   1            2            3           
  1 "17 ( 34 %)" "14 ( 28 %)" " 0 (    %)"
  2 "15 ( 30 %)" "17 ( 34 %)" " 0 (    %)"
  3 "18 ( 36 %)" "19 ( 38 %)" " 0 (    %)"

用您想要的任何字符串替换空白 (" ")。

于 2012-12-04T22:15:25.147 回答
0

一种简单的方法是解析行和列(如果您的数据不大):

no_row=nrow(o)
no_col=ncol(o)

for(rows in 1:no_row){
  for(cols in 1:no_col){
    o[rows,cols]<-sub(pattern = "NaN", replacement = "0",  x = o[rows,cols])
    }
}

但是当然有更简单的更好的方法来做到这一点。:) 上面的代码输出是:

> o
   y
x   1             2             3          
  1 "17 (  31 %)" "13 (  29 %)" " 0 ( 0 %)"
  2 "16 (  29 %)" "21 (  47 %)" " 0 ( 0 %)"
  3 "22 (  40 %)" "11 (  24 %)" " 0 ( 0 %)"

希望它会有所帮助!

于 2012-12-04T20:39:51.517 回答