web-dev-qa-db-ja.com

データフレーム内の非NAのカウント。ベクトルとして答えを得る

次のRがあるとしますdata.frameZZZ

_( ZZZ <- structure(list(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8, 
8)), .Names = c("n", "m", "o"), row.names = c(NA, -3L), class = "data.frame") )

## not run
   n  m o
1  1  6 7
2  2 NA 8
3 NA NA 8
_

ベクトルの形で、私が持っている非NAの数を知りたいです。私は答えを次のように利用できるようにします:

_2, 1, 3
_

コマンドlength(ZZZ)を使用すると、_3_を取得します。これはもちろん、data.frameに含まれるベクトルの数であり、十分な情報です。

私はこれを操作する他の関数を持っていますdata.frameそしてベクトルの形で答えを与えますが、長さはそのように動作しません。

23
Plsvn

これを試して:

_# define "demo" dataset
ZZZ <- data.frame(n=c(1,2,NA),m=c(6,NA,NA),o=c(7,8,8))
# apply the counting function per columns
apply(ZZZ, 2, function(x) length(which(!is.na(x))))
_

実行したこと:

_> apply(ZZZ, 2, function(x) length(which(!is.na(x))))
n m o 
2 1 3 
_

あなたが本当にベクトルを返すことを主張するなら、あなたは_as.vector_を使うかもしれません。この関数を定義することにより:

_nonNAs <- function(x) {
    as.vector(apply(x, 2, function(x) length(which(!is.na(x)))))
    }
_

単にnonNAs(ZZZ)を実行できます:

_> nonNAs(ZZZ)
[1] 2 1 3
_
30
daroczig
colSums(!is.na(x))

ベクトル化ftw。

71
hadley

欠損値の合計を取得するにはsum(is.na(x))を使用し、列単位ではcolSums(is.na(x))を使用します。xはデータセットを含む変数です

6
Geek_To_Learn

全体のNAの合計のみが必要な場合は、sum()with!is.na()でそれを行います。

ZZZ <- data.frame(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8, 8))
sum(!is.na(ZZZ))
1
kmm