Определите количество пропущенных значений в столбце данных с помощью dplyr & purrr - PullRequest
1 голос
/ 22 апреля 2019

Извлечение простого кадра данных из показателя качества встроенного набора данных R и проверка пропущенных значений:

airquality %>% summary

Пока это работает:

airquality %>% map_df(is.na) %>% map_df(sum)

  Ozone Solar.R  Wind  Temp Month   Day
  <int>   <int> <int> <int> <int> <int>
1    37       7     0     0     0     0

, и это - в синтаксисе мурлыканья - тоже работает:

airquality %>% map_df(~sum(is.na(.)))
  Ozone Solar.R  Wind  Temp Month   Day
  <int>   <int> <int> <int> <int> <int>
1    37       7     0     0     0     0

, это не работает:

airquality %>% map_df(sum(is.na(.)))

  Ozone Solar.R  Wind  Temp Month   Day
  <int>   <int> <dbl> <int> <int> <int>
1    23     148     8    82     6    13

Мой вопрос: Как вы можете объяснить последний результат?

Где именно происходит вычисление - в dplyr или purrr?

1 Ответ

2 голосов
/ 23 апреля 2019

Поведение различных синтаксисов вокруг %>% подробно объясняется в help("%>%", package = "magrittr").

В этом конкретном случае sum(is.na(.)) не интерпретируется как анонимная функция, как, по-видимому, ожидает OP, поэтому . не является аргументом для анонимной функции.

Вместо этого . - это LHS (левая сторона) трубы.

airquality %>% map_df(sum(is.na(.))) можно развернуть как map_df(airquality, .f = sum(is.na(airquality))).

sum(is.na(airquality)) превращается в 44, а из help("map_df"), если аргумент .f для map_df является числовым вектором,

преобразуется вФункция экстрактора

Подводя итог: это извлекает 44-й элемент каждого столбца и ограничивает его обратно фреймом данных.Или, с некоторым упрощением, это извлекает 44-ю строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...