次の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そしてベクトルの形で答えを与えますが、長さはそのように動作しません。
これを試して:
_# 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
_
colSums(!is.na(x))
ベクトル化ftw。
欠損値の合計を取得するにはsum(is.na(x))を使用し、列単位ではcolSums(is.na(x))を使用します。xはデータセットを含む変数です
全体の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))