Элегантный способ сообщения отсутствующих значений в data.frame
Вот небольшой фрагмент кода, который я написал, чтобы сообщать переменные с отсутствующими значениями из фрейма данных. Я пытаюсь придумать более элегантный способ сделать это, который, возможно, возвращает data.frame, но я застрял:
for (Var in names(airquality)) {
missing <- sum(is.na(airquality[,Var]))
if (missing > 0) {
print(c(Var,missing))
}
}
Изменить: я имею дело с data.frames с десятками до сотен переменных, поэтому он указывает, что мы сообщаем только переменные с отсутствующими значениями.
Ответы
Ответ 1
Просто используйте 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
Ответ 2
Мы можем использовать 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
Ответ 3
Более кратко: sum(is.na(x[1]))
Это
Ответ 4
Моим новым фаворитом (не слишком широких) данных являются методы из превосходного пакета с наньяром. Не только вы получаете частоты, но и шаблоны пропусков:
library(naniar)
library(UpSetR)
riskfactors %>%
as_shadow_upset() %>%
upset()
![enter image description here]()
Часто полезно видеть, где отсутствуют пропуски по отношению к отсутствующим, что может быть достигнуто путем построения графика рассеяния с пропусками:
ggplot(airquality,
aes(x = Ozone,
y = Solar.R)) +
geom_miss_point()
![enter image description here]()
Или для категориальных переменных:
gg_miss_fct(x = riskfactors, fct = marital)
![enter image description here]()
Эти примеры взяты из виньетки пакета, в которой перечислены другие интересные визуализации.
Ответ 5
Еще одна графическая альтернатива - функция plot_missing
из превосходного пакета DataExplorer
:
![enter image description here]()
Документы также указывают на то, что вы можете сохранить эти результаты для дополнительного анализа с помощью missing_data <- plot_missing(data)
.
Ответ 6
summary(airquality)
уже дает вам эту информацию
Пакеты VIM также предлагают некоторые хорошие данные для data.frame.
library("VIM")
aggr(airquality)
![enter image description here]()
Ответ 7
Другая функция, которая поможет вам просмотреть отсутствующие данные, будет df_status из библиотеки funModeling
library(funModeling)
iris.2 - набор диафрагмы с некоторыми добавленными NA. Вы можете заменить это на ваш набор данных.
df_status(iris.2)
Это даст вам количество и процент НС в каждом столбце.
Ответ 8
Для более одного графического решения, visdat
пакет предлагает vis_miss
.
library(visdat)
vis_miss(airquality)
![enter image description here]()
Очень похоже на вывод Amelia
с небольшой разницей в выдаче% s при отсутствии на входе.
Ответ 9
Еще один графический и интерактивный способ заключается в использовании is.na10
функции из heatmaply
библиотеки:
library(heatmaply)
heatmaply(is.na10(airquality), grid_gap = 1,
showticklabels = c(T,F),
k_col =3, k_row = 3,
margins = c(55, 30),
colors = c("grey80", "grey20"))
![enter image description here]()
Вероятно, не будет хорошо работать с большими наборами данных..
Ответ 10
Если вы хотите сделать это для определенного столбца, вы также можете использовать этот
length(which(is.na(airquality[1])==T))
Ответ 11
Я думаю, что библиотека Amelia отлично справляется с обработкой отсутствующих данных, а также включает карту для визуализации отсутствующих строк.
install.packages("Amelia")
library(Amelia)
missmap(airquality)
![enter image description here]()
Вы также можете запустить следующий код вернет логические значения н
row.has.na <- apply(training, 1, function(x){any(is.na(x))})
Ответ 12
Функция пакета prepare_missing_values_graph
может использоваться для изучения данных панели:
![enter image description here]()