将summary_all与既需要又不需要na.rm = T参数的函数一起使用

时间:2019-08-06 21:16:34

标签: r dplyr tidyverse summarize

我的数据观察结果分为几组,我正在尝试使用summary_all函数获取每个组的多个汇总统计信息(例如,均值,中位数,长度,标准差)。

问题在于某些函数(例如,均值,中位数)需要使用na.rm = T参数,而其他函数则不需要(例如,n())。当我在summary_all中指定na.rm = T时,它将na.rm参数应用于列出的每个函数(以下,均值和sd)。

library(dplyr)

airquality %>% 
  select(Month, Ozone, Solar.R, Temp) %>%
  group_by(Month) %>%
  summarize_all(list(mean, sd), na.rm=T)

但是,当我包含该函数时,它也将其应用于n()时,会出现以下错误:“错误:评估错误:未使用的参数(臭氧,na.rm = TRUE)”

airquality %>% 
  select(Month, Ozone, Solar.R, Temp) %>%
  group_by(Month) %>%
  summarize_all(list(mean, sd, n), na.rm=T)

我也很想知道如何摆脱使用多个函数时summary_all创建的可怕列名。例如,在第一段代码中,我得到了列名,例如mpg_<S4: standardGeneric>cyl_<S4: standardGeneric>

1 个答案:

答案 0 :(得分:0)

正如我在对问题的评论中提到的那样,我认为n()引起了一个单独的问题:该函数期望0输入,因此我认为您不能在summary_all中使用它。为了讨论na.rm,我们假设您想了解length

airquality %>% 
  select(Month, Ozone, Solar.R, Temp) %>%
  group_by(Month) %>%
  summarize_all(list(mean,sd,length),na.rm=T)
  

.Primitive(“ length”)(Ozone,na.rm = TRUE)中的错误:     2个参数传递给'length',需要1

一种解决方案是手动指定要具有na.rm = T的每个函数,并将它们设置为匿名函数:

airquality %>% 
  select(Month, Ozone, Solar.R, Temp) %>%
  group_by(Month) %>%
  summarize_all(list(mean = function(x) mean(x,na.rm=T), sd = function(x) sd(x,na.rm=T), length=length))

还要注意,完成后,列表中项目的名称会更改其在数据框中的显示方式。假设我们希望第一个被称为“酷”:

airquality %>% 
  select(Month, Ozone, Solar.R, Temp) %>%
  group_by(Month) %>%
  summarize_all(list(cool = function(x) mean(x,na.rm=T), sd = function(x) sd(x,na.rm=T), length=length))
# A tibble: 5 x 10
  Month Ozone_cool Solar.R_cool Temp_cool Ozone_sd Solar.R_sd Temp_sd Ozone_length Solar.R_length Temp_length
  <int>      <dbl>        <dbl>     <dbl>    <dbl>      <dbl>   <dbl>        <int>          <int>       <int>
1     5       23.6         181.      65.5     22.2      115.     6.85           31             31          31
2     6       29.4         190.      79.1     18.2       92.9    6.60           30             30          30
3     7       59.1         216.      83.9     31.6       80.6    4.32           31             31          31
4     8       60.0         172.      84.0     39.7       76.8    6.59           31             31          31
5     9       31.4         167.      76.9     24.1       79.1    8.36           30             30          30