Saya ingin menghitung jumlah NA
nilai dalam kolom bingkai data. Katakanlah bingkai data saya dipanggil df
, dan nama kolom yang saya pertimbangkan adalah col
. Cara saya menemukan adalah sebagai berikut:
sapply(df$col, function(x) sum(length(which(is.na(x)))))
Apakah ini cara yang baik / paling efisien untuk melakukan ini?
value
, selainNA
menulis fungsi booleanis.value
lalu menggunakansum(is.value(df$col))
cara to go atau ada sintaks langsung yang lebih ringkas untuk ini?sum(df$col==value,na.rm=FALSE)
berhasil.na.rm=TRUE
, karena sebaliknya jikadf$col
berisi NAs,sum
akan kembaliNA
.Jika Anda mencari
NA
jumlah untuk setiap kolom dalam kerangka data, maka:na_count <-sapply(x, function(y) sum(length(which(is.na(y)))))
harus memberi Anda daftar dengan jumlah untuk setiap kolom.
Harus mengeluarkan data dengan baik dalam bingkai data seperti:
sumber
na_count$name<-rownames(na_count)
.na_count <-sapply(x, function(y) sum(is.na(y)))
adalah alternatif yang lebih pendek.Coba
colSums
fungsinyadf <- data.frame(x = c(1,2,NA), y = rep(NA, 3)) colSums(is.na(df)) #x y #1 3
sumber
Jika Anda ingin menghitung jumlah NA di seluruh kerangka data, Anda juga dapat menggunakan
sumber
Dalam
summary()
output, fungsi tersebut juga menghitungNA
s sehingga seseorang dapat menggunakan fungsi ini jika menginginkan jumlahNA
s dalam beberapa variabel.sumber
summary
output saat digunakan pada satu kolom dapat digunakan, sedangkan outputnya dari seluruh bingkai data bersifat karakter dan jumlahnya sulit untuk diekstrak jika Anda membutuhkannya nanti. Lihatc(summary(mtcars))
.Cara terbalik untuk menghitung jumlah nol di setiap kolom bingkai data:
library(tidyverse) library(purrr) df %>% map_df(function(x) sum(is.na(x))) %>% gather(feature, num_nulls) %>% print(n = 100)
sumber
df %>% summarise_all(funs(sum(is.na(.))))
df %>% map_df(~sum(is.na(.)))
atau tanpa dplyr sebagaimap_df(~sum(is.na(df)))
Bentuk ini, sedikit berubah dari Kevin Ogoros:
na_count <-function (x) sapply(x, function(y) sum(is.na(y)))
mengembalikan jumlah NA sebagai array bernama int
sumber
na_count <-function (x) lapply(x, function(y) sum(is.na(y)))
Solusi Tidyverse yang cepat dan mudah untuk
NA
menghitung semua kolom adalah dengan menggunakansummarise_all()
yang menurut saya membuat solusi yang lebih mudah dibaca daripada menggunakanpurrr
atausapply
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
sumber
Coba ini:
sumber
Jawaban rrs pengguna benar tetapi itu hanya memberi tahu Anda jumlah nilai NA di kolom tertentu dari bingkai data yang Anda lewati untuk mendapatkan jumlah nilai NA untuk keseluruhan bingkai data coba ini:
apply(<name of dataFrame>, 2<for getting column stats>, function(x) {sum(is.na(x))})
Ini triknya
sumber
apply(df, 2, function(x) sum(is.na(x)))
Saya membaca file csv dari direktori lokal. Kode berikut berfungsi untuk saya.
# 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
sumber
Mirip dengan jawaban hute37 tetapi menggunakan
purrr
paket. Saya pikir pendekatan tidyverse ini lebih sederhana daripada jawaban yang diajukan oleh AbiK.library(purrr) map_dbl(df, ~sum(is.na(.)))
Catatan: tilde (
~
) membuat fungsi anonim. Dan '.' mengacu pada masukan untuk fungsi anonim, dalam hal ini data.framedf
.sumber
sapply(name of the data, function(x) sum(is.na(x)))
sumber
Anda dapat menggunakan ini untuk menghitung jumlah NA atau kosong di setiap kolom
colSums(is.na(data_set_name)|data_set_name == '')
sumber