我的数据观察结果分为几组,我正在尝试使用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>
答案 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