1

私は、十分formatではない読み取り可能なフラットテーブルを作成するために使用しています。ftable1つの注意点は、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

簡単な方法の 1 つは、行と列を解析することです (データが大きくない場合)。

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 に答える