Подтвердить что ты не робот

Элегантный способ сообщения отсутствующих значений в data.frame

Вот небольшой фрагмент кода, который я написал, чтобы сообщать переменные с отсутствующими значениями из фрейма данных. Я пытаюсь придумать более элегантный способ сделать это, который, возможно, возвращает data.frame, но я застрял:

for (Var in names(airquality)) {
    missing <- sum(is.na(airquality[,Var]))
    if (missing > 0) {
        print(c(Var,missing))
    }
}

Изменить: я имею дело с data.frames с десятками до сотен переменных, поэтому он указывает, что мы сообщаем только переменные с отсутствующими значениями.

4b9b3361

Ответ 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]))

Это

  • x[1] Посмотрите на первый столбец

  • is.na() true, если он NA

  • sum() TRUE is 1, FALSE is 0

Ответ 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