No.11445 NAの数の集計  【波音】 2009/12/07(Mon) 12:33

以下のようなデータ行列:

> a <- matrix(c(
+ 0, 0, 0, 0,
+ 1, 1, NA, NA,
+ 1, 1, 1, NA,
+ 1, 1, 1, 1),ncol=4, byrow=TRUE)
> a
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 1 1 NA NA
[3,] 1 1 1 NA
[4,] 1 1 1 1

について,

(1)行の要素が全て0である
(2)NAが2つだけ存在する
(3)NAが1つだけ存在する
(4) (1)〜(3)のいずれにも該当しない

という行の数を集計したいです(実際には上記4つの特徴を持った行データが何行にもわたって存在しています)。

例えば,(1)と(4)は

> table(apply(a, 1, sum) == 0)

などとすれば集計できると思いますが,(2)と(3)それぞれを集計するいいアイディアがどうしても浮かびません。

No.11446 Re: NAの数の集計  【surg】 2009/12/07(Mon) 12:47

(2) sum(apply(a, 1, function(x) sum(is.na(x)) == 2))
(3) sum(apply(a, 1, function(x) sum(is.na(x)) == 1))

で如何?

No.11447 Re: NAの数の集計  【波音】 2009/12/07(Mon) 13:31

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

先にfunction(x) sum(is.na(x))という関数を用意しておいて,それをapply()を用いて行ごとに実行してあげればよかったのですね。

No.11448 Re: NAの数の集計  【surg】 2009/12/07(Mon) 14:19

ちょっと違います.
function(x) sum(is.na(x)) == n までが関数定義です.

No.11449 Re: NAの数の集計  【青木繁伸】 2009/12/07(Mon) 14:20

基本的には同じですが,table(rowSums(is.na(a)))
なお,負の値を取るデータがある場合には,(1) にtable(apply(a, 1, sum) == 0) は NG

No.11450 Re: NAの数の集計  【波音】 2009/12/07(Mon) 15:06

> function(x) sum(is.na(x)) == n までが関数定義です.

あっ,ほんとですね。カッコがどこまでかかっているのか見誤っていました(^_^;)

> 基本的には同じですが,table(rowSums(is.na(a)))

そういう(こんなにも簡単にできる)やり方があったのですね。私にはまだまだ発想のツボが足りないようです(汗^^;)

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