一种dplyr
获得计数的解决方案可能是:
summarise_all(df, ~sum(is.na(.)))
或获得百分比:
summarise_all(df, ~(sum(is_missing(.) / nrow(df))))
也许还值得注意的是,丢失的数据可能是丑陋的,不一致的,并且并非总是NA
根据源或导入时的处理方式进行编码。可以根据您的数据和要考虑丢失的内容来调整以下功能:
is_missing <- function(x){
missing_strs <- c('', 'null', 'na', 'nan', 'inf', '-inf', '-9', 'unknown', 'missing')
ifelse((is.na(x) | is.nan(x) | is.infinite(x)), TRUE,
ifelse(trimws(tolower(x)) %in% missing_strs, TRUE, FALSE))
}
df <- data.frame(a = c(NA, '1', ' ', 'missing'),
b = c(0, 2, NaN, 4),
c = c('NA', 'b', '-9', 'null'),
d = 1:4,
e = c(1, Inf, -Inf, 0))
> summarise_all(df, ~sum(is_missing(.)))
a b c d e
1 3 1 3 0 2
> summarise_all(df, ~(sum(is_missing(.) / nrow(df))))
a b c d e
1 0.75 0.25 0.75 0 0.5
table
字符,您必须解析出NA的数量。