使用dplyr和purrr检测每个数据框列的缺失值数量

时间:2019-04-22 06:57:14

标签: r dplyr purrr

从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

,并且,以purrr语法,也可以:

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 个答案:

答案 0 :(得分:2)

%>%中详细说明了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")的{​​{1}}参数是一个数字矢量,则从.f得出

  

它被转换为提取函数

总结:这是提取每列的第44个元素,并将其约束回数据帧。或者,过分简化,将提取第44行。