Supposons que j'ai le R data.frame suivant ZZZ
:
( 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
Je veux savoir, sous forme de vecteur, combien de non-NA j'ai. Je veux que la réponse soit disponible:
2, 1, 3
Lorsque j'utilise la commande length(ZZZ)
, j'obtiens 3
, Qui est bien sûr le nombre de vecteurs dans le data.frame , une information suffisamment précieuse.
J'ai d'autres fonctions qui opèrent sur ce data.frame et me donnent des réponses sous forme de vecteurs, mais, dang-it, la longueur ne fonctionne pas comme ça.
Essaye ça:
# 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))))
Ayant couru:
> apply(ZZZ, 2, function(x) length(which(!is.na(x))))
n m o
2 1 3
Si vous insistez vraiment pour retourner un vecteur, vous pouvez utiliser as.vector
, Par exemple en définissant cette fonction:
nonNAs <- function(x) {
as.vector(apply(x, 2, function(x) length(which(!is.na(x)))))
}
Vous pouvez simplement exécuter nonNAs(ZZZ)
:
> nonNAs(ZZZ)
[1] 2 1 3
colSums(!is.na(x))
Vectorisation ftw.
Pour obtenir le nombre total de valeurs manquantes, utilisez sum (is.na (x)) et pour les colonnes, utilisez colSums (is.na (x)) où x est variable qui contient l'ensemble de données
Si vous voulez uniquement la somme totale des NA, alors sum () avec! Is.na () le fera:
ZZZ <- data.frame(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8, 8))
sum(!is.na(ZZZ))