web-dev-qa-db-fra.com

Déterminer le nombre de valeurs NA dans une colonne

Je veux compter le nombre de valeurs NA dans une colonne de trame de données. Disons que ma trame de données s'appelle df et que le nom de la colonne que je considère est col. La façon dont je suis venu avec est la suivante:

sapply(df$col, function(x) sum(length(which(is.na(x)))))  

Est-ce un moyen efficace/efficace de le faire?

118
user3274289

Vous réfléchissez au problème:

sum(is.na(df$col))
281
rrs

Si vous recherchez NA compte pour chaque colonne dans un cadre de données, alors:

na_count <-sapply(x, function(y) sum(length(which(is.na(y)))))

devrait vous donner une liste avec les comptes pour chaque colonne.

na_count <- data.frame(na_count)

Doit bien sortir les données dans un cadre de données tel que:

----------------------
| row.names | na_count
------------------------
| column_1  | count
72
Kevin Ogoro

Essayez la fonction colSums

df <- data.frame(x = c(1,2,NA), y = rep(NA, 3))

colSums(is.na(df))

#x y 
#1 3 
27
Tony Ladson

Si vous souhaitez compter le nombre d'AN dans l'ensemble du cadre de données, vous pouvez également utiliser

sum(is.na(df))
17
bkielstr

Dans la sortie summary(), la fonction compte également le NAs afin que vous puissiez utiliser cette fonction si vous voulez la somme de NAs dans plusieurs variables.

12
Shahin

Un moyen simple de compter le nombre de valeurs NULL dans chaque colonne d'un cadre de données:

library(tidyverse)
library(purrr)

df %>%
    map_df(function(x) sum(is.na(x))) %>%
    gather(feature, num_nulls) %>%
    print(n = 100)
10
Abi K

Cette forme, légèrement différente de celle de Kevin Ogoros:

na_count <-function (x) sapply(x, function(y) sum(is.na(y)))

renvoie NA compte comme tableau nommé int

7
hute37

La réponse de l'utilisateur est correcte, mais cela ne vous indique que le nombre de valeurs NA dans la colonne particulière du bloc de données que vous transmettez pour obtenir le nombre de valeurs NA pour l'ensemble du bloc de données. Essayez ceci:

apply(<name of dataFrame>, 2<for getting column stats>, function(x) {sum(is.na(x))})

Cela fait l'affaire

3
iec2011007

Essaye ça:

length(df$col[is.na(df$col)])
2
Rabish kumar Singh

J'ai lu un fichier csv à partir du répertoire local. Le code suivant fonctionne pour moi.

# to get number of which contains na
sum(is.na(df[, c(columnName)]) # to get number of na row

# to get number of which not contains na
sum(!is.na(df[, c(columnName)]) 

#here columnName is your desire column name
2
reza.cse08

Similaire à la réponse de hute37 mais utilisant la bibliothèque de ronronnement. Je pense que cette approche tidyverse est plus simple que la réponse proposée par AbiK.

map_dbl(df, ~sum(is.na(.)))

Remarque: le tilda crée une fonction anonyme. Et le '.' fait référence à l'entrée pour la fonction anonyme. Dans ce cas, le data.frame df.

1
Chris Kiniry

Vous pouvez l'utiliser pour compter le nombre de NA ou de blancs dans chaque colonne.

colSums(is.na(data_set_name)|data_set_name == '')
0
Prakhar Srivastava