Ik wil het aantal NA
-waarden in een dataframekolom tellen. Stel dat mijn dataframe df
heet, en de naam van de kolom die ik overweeg is col
. De manier waarop ik ben gekomen is als volgt:
sapply(df$col, function(x) sum(length(which(is.na(x)))))
Is dit een goede/meest efficiënte manier om dit te doen?
Antwoord 1, autoriteit 100%
Je denkt te veel na over het probleem:
sum(is.na(df$col))
Antwoord 2, autoriteit 24%
Als u zoekt naar NA
-tellingen voor elke kolom in een dataframe, dan:
na_count <-sapply(x, function(y) sum(length(which(is.na(y)))))
zou u een lijst moeten geven met de tellingen voor elke kolom.
na_count <- data.frame(na_count)
Zou de gegevens netjes moeten weergeven in een dataframe zoals:
----------------------
| row.names | na_count
------------------------
| column_1 | count
Antwoord 3, autoriteit 14%
Probeer de functie colSums
df <- data.frame(x = c(1,2,NA), y = rep(NA, 3))
colSums(is.na(df))
#x y
#1 3
Antwoord 4, autoriteit 6%
Als u het aantal NA’s in het gehele dataframe wilt tellen, kunt u ook gebruik maken van
sum(is.na(df))
Antwoord 5, autoriteit 4%
In de summary()
OUTPUT, de functie telt ook de NA
S, zodat u deze functie kunt gebruiken als u de som van NA
S in verschillende variabelen.
Antwoord 6, Autoriteit 4%
Een snelle en gemakkelijke opgeruimde oplossing om een NA
TELLEN VOOR ALLE KOLOMMEN TE KRIJGEN, is het gebruik summarise_all()
waarvan ik denk dat het een veel eenvoudiger te lezen oplossing maakt dan het gebruik van purrr
OF sapply
library(tidyverse)
# Example data
df <- tibble(col1 = c(1, 2, 3, NA),
col2 = c(NA, NA, "a", "b"))
df %>% summarise_all(~ sum(is.na(.)))
#> # A tibble: 1 x 2
#> col1 col2
#> <int> <int>
#> 1 1 2
of gebruik de modernere across()
functie:
df %>% summarise(across(everything(), ~ sum(is.na(.))))
Antwoord 7, Autoriteit 3%
Een opgeruimde manier om het aantal nulls in elke kolom van een dataframe te tellen:
library(tidyverse)
library(purrr)
df %>%
map_df(function(x) sum(is.na(x))) %>%
gather(feature, num_nulls) %>%
print(n = 100)
Antwoord 8, Autoriteit 2%
Dit formulier, enigszins gewijzigd van Kevin Ogoros’s One:
na_count <-function (x) sapply(x, function(y) sum(is.na(y)))
Retourneert NA-telt zoals de naam int array
Antwoord 9
sapply(name of the data, function(x) sum(is.na(x)))
Antwoord 10
Probeer dit:
length(df$col[is.na(df$col)])
Antwoord 11
Het antwoord van de gebruiker is juist, maar dat vertelt je alleen het aantal NA-waarden in de specifieke kolom van het dataframe dat je doorgeeft om het aantal NA-waarden voor het hele dataframe te krijgen, probeer dit:
apply(<name of dataFrame>, 2<for getting column stats>, function(x) {sum(is.na(x))})
Dit doet de truc
Antwoord 12
Ik lees een csv-bestand uit de lokale map. De volgende code werkt voor mij.
# 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
Antwoord 13
Vergelijkbaar met het antwoord van hute37, maar met het pakket purrr
. Ik denk dat deze opgeruimde aanpak eenvoudiger is dan het door AbiK voorgestelde antwoord.
library(purrr)
map_dbl(df, ~sum(is.na(.)))
Opmerking: de tilde (~
) creëert een anonieme functie. En de ‘.’ verwijst naar de invoer voor de anonieme functie, in dit geval de data.frame df
.
Antwoord 14
Als u zoekt naar null-waarden in elke kolom die na elkaar moeten worden afgedrukt, kunt u dit gebruiken. Eenvoudige oplossing.
lapply(df, function(x) { length(which(is.na(x)))})
Antwoord 15
U kunt dit gebruiken om het aantal NA of spaties in elke kolom te tellen
colSums(is.na(data_set_name)|data_set_name == '')
Antwoord 16
Voor de volledigheid kunt u ook het argument useNA
in de tabel gebruiken. table(df$col, useNA="always")
telt bijvoorbeeld alle niet-NA
-gevallen en de NA
-gevallen.