No.20145 「0」とカウントされるtable()  【波音】 2013/08/23(Fri) 00:20

Rの既存関数で添付図のような集計ができる関数をご存じでしたら教えて頂けますか?

既存関数のtable()はある変数Xを引数に1つ指定すると,Xの水準(Levels)についてしか集計されませんが,その変数にも含まれない水準値(カテゴリ)についても「0」と集計されるような関数があると便利だと思っています。

ーーーーー 関数イメージ ーーーーー
x <- c(1, 1, 2, 5)
lev <- 1:5
t.table(x, lev)

1 2 3 4 5
2 1 0 0 1
ーーーーー 関数イメージ ーーーーー

既存関数でなければ,自作するしかないのですが。

最終的には,
tt.table(X1, X2)
とすると,X1とX2のユニーク値(> unique(X1, X2)のように)をとって,それについて添付図のようにクロス集計ができる形にしたいのですが,そういう関数があるのであれば作成するのも大変ですので(汗)


No.20146 Re: 「0」とカウントされるtable()  【青木繁伸】 2013/08/23(Fri) 08:48

探すより作る方が速いので,変数は整数値を取るものとして以下のように
> t.table <- function(x) {
+ return(table(factor(x, level=min(x):max(x))))
+ }

> x <- c(1,1,2,5)
> t.table(x)

1 2 3 4 5
2 1 0 0 1

> tt.table <- function(x, y) {
+ z <- c(x, y)
+ return(table(rep(c(deparse(substitute(x)), deparse(substitute(y))),
+ c(length(x), length(y))), factor(z, level=min(z):max(z))))
+ }

> x1 <- c(1,1,2,1,3,1,1,2,3)
> x2 <- c(1,4,3,3,3,1,5,6,1)
> tt.table(x1, x2)

1 2 3 4 5 6
x1 5 2 2 0 0 0
x2 3 0 3 1 1 1

No.20150 Re: 「0」とカウントされるtable()  【波音】 2013/08/24(Sat) 17:41

回答ありがとうございます。

factor関数で水準(levels)を任意で付加してあげれば,全水準について集計されるから,ベクトル内に存在しない値も「0」とカウントされるようになるのですね。知りませんでした・・

2つ引数がある場合はベクトルの長さの文だけ「変数ラベル」を用意してから,そのクロス集計をしてあげることで実現可能だったのですね。大変勉強になりました。

ありがとうございました!

● 「統計学関連なんでもあり」の過去ログ--- 046 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る