使用dplyr&purrr检测每个dataframe列的缺失值数

问题描述 投票:1回答:1

从R内置数据集airquality获取一个简单的数据框并检查它们的缺失值:

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?

r dplyr purrr
1个回答
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")将向.fmap_df进行攻击,

它被转换为提取器功能

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

© www.soinside.com 2019 - 2024. All rights reserved.