Элегантный способ сообщить о пропущенных значениях в данных.рамка
вот небольшой фрагмент кода, который я написал, чтобы сообщить переменные с пропущенными значениями из фрейма данных. Я пытаюсь придумать более элегантный способ сделать это, что, возможно, возвращает данные.кадр, но я застрял:
for (Var in names(airquality)) {
missing <- sum(is.na(airquality[,Var]))
if (missing > 0) {
print(c(Var,missing))
}
}
Edit: я имею дело с данными.фреймы с десятками до сотен переменных, поэтому важно, чтобы мы сообщали только переменные с пропущенными значениями.
11 ответов:
просто использовать
sapply
> sapply(airquality, function(x) sum(is.na(x))) Ozone Solar.R Wind Temp Month Day 37 7 0 0 0 0
вы также можете использовать
apply
илиcolSums
на матрице, созданнойis.na()
> apply(is.na(airquality),2,sum) Ozone Solar.R Wind Temp Month Day 37 7 0 0 0 0 > colSums(is.na(airquality)) Ozone Solar.R Wind Temp Month Day 37 7 0 0 0 0
более емкий-:
sum(is.na(x[1]))
что это
x[1]
посмотрите на первый столбец
is.na()
true, еслиNA
sum()
TRUE
и1
,FALSE
и0
можно использовать
map_df
С purrr.library(mice) library(purrr) # map_df with purrr map_df(airquality, function(x) sum(is.na(x))) # A tibble: 1 × 6 # Ozone Solar.R Wind Temp Month Day # <int> <int> <int> <int> <int> <int> # 1 37 7 0 0 0 0
еще одна графическая альтернатива - отличное
DataExplorer
пакет:Docs также указывает на то, что вы можете сохранить результаты для дополнительного анализа с
missing_data <- plot_missing(data)
.
еще одна функция, которая поможет вам взглянуть на отсутствующие данные, будет df_status из библиотеки funModeling
library(funModeling)
Айрис.2-это набор данных iris с некоторыми добавленными NAs.Вы можете заменить его своим набором данных.
df_status(iris.2)
это даст вам количество и процент NAs в каждом столбце.
мой новый фаворит для (не слишком широких) данных-это методы из excellent naniar пакета. Вы получаете не только частоты, но и паттерны пропускания:
library(naniar) library(UpSetR) riskfactors %>% as_shadow_upset() %>% upset()
это часто полезно, чтобы увидеть, где пропуски по отношению к не хватает, которые могут быть достигнуты путем построения диаграммы рассеяния с пропусками:
ggplot(airquality, aes(x = Ozone, y = Solar.R)) + geom_miss_point()
или для категорийных переменные:
gg_miss_fct(x = riskfactors, fct = marital)
эти примеры-из пакета виньетка это список других интересных визуализаций.
для еще одного графического решения,
visdat
пакета предложенияvis_miss
.library(visdat) vis_miss(airquality)
очень похоже на
Amelia
выход с небольшой разницей давая %s на пропусках из коробки.
Если вы хотите сделать это для конкретного столбца, то вы также можете использовать этот
length(which(is.na(airquality[1])==T))
Я думаю, что библиотека Amelia делает хорошую работу в обработке отсутствующих данных также включает в себя карту для визуализации отсутствующих строк.
install.packages("Amelia") library(Amelia) missmap(airquality)
вы также можете запустить следующий код, который вернет логические значения na
row.has.na <- apply(training, 1, function(x){any(is.na(x))})