提问者:小点点

将summarize_all与需要和不需要na. rm=T参数的函数一起使用


我的数据中的观察结果包含在组中,我试图使用summarize_all函数为每个组获取多个汇总统计数据(例如,平均值、中位数、长度、均方差)。

问题是一些函数(例如,均值,中位数)需要na. rm=T参数,而另一些则不需要(例如,n())。当我在summarize_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(),这给了我错误:“错误:评估错误:未使用的参数(Ozone, na.rm=TRUE)”

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

我还想知道如何摆脱summarize_all在使用多个函数时创建的糟糕列名。例如,在第一段代码中,我得到了像这样的列名mpg_


共1个答案

匿名用户

正如我在你的问题的评论中提到的,我认为n()导致了一个单独的问题:它期望函数有0个输入,所以我认为你不能在summarize_all中使用它。为了讨论na. rm,让我们假设你想知道长度

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

错误。原始("长度")(臭氧,na. rm=TRUE):传递给“长度”的2个参数需要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