r语言 - dplyr summarise_each with na.rm



是否有方法指示dplyrsummarise_eachna.rm=TRUE一起使用?我想用summarise_each("mean")取变量的平均值,但我不知道如何指定它来忽略缺失的值。

按照文档中的链接,似乎可以使用funs(mean(., na.rm = TRUE)):

library(dplyr)
by_species <- iris %>% group_by(Species)
by_species %>% summarise_each(funs(mean(., na.rm = TRUE)))

更新

当前的dplyr版本强烈建议使用CCD_ 6而不是更具体的函数CCD_

将以下语法(命名列表中的函数)转换为across可能如下所示:

library(dplyr)
ggplot2::msleep %>% 
  select(vore, sleep_total, sleep_rem) %>%
  group_by(vore) %>%
  summarise(across(everything(), .f = list(mean = mean, max = max, sd = sd), na.rm = TRUE))
#> # A tibble: 5 x 7
#>   vore  sleep_total_mean sleep_total_max sleep_total_sd sleep_rem_mean
#>   <chr>            <dbl>           <dbl>          <dbl>          <dbl>
#> 1 carni            10.4             19.4           4.67           2.29
#> 2 herbi             9.51            16.6           4.88           1.37
#> 3 inse~            14.9             19.9           5.92           3.52
#> 4 omni             10.9             18             2.95           1.96
#> 5 <NA>             10.2             13.7           3.00           1.88
#> # ... with 2 more variables: sleep_rem_max <dbl>, sleep_rem_sd <dbl>

旧答案

summarise_each现在已弃用,这里是summarise_all的一个选项。

  • 仍然可以在funs参数中指定na.rm = TRUE(cf@flodel的答案:只需将summarise_each替换为summarise_all
  • 但是您也可以在funs参数之后添加na.rm = TRUE

当你只想调用一个以上的函数时,这很有用,例如:

编辑

由于@Mikko的评论,funs()参数现在被(软)否决了。可以使用警告给出的建议,请参阅下面的代码。CCD_ 18仍然可以被指定为CCD_。

我使用ggplot2::msleep是因为它包含NA,并且显示得更好。

library(dplyr)
ggplot2::msleep %>% 
  select(vore, sleep_total, sleep_rem) %>%
  group_by(vore) %>%
  summarise_all(funs(mean, max, sd), na.rm = TRUE)
#> Warning: funs() is soft deprecated as of dplyr 0.8.0
#> Please use a list of either functions or lambdas: 
#> 
#>   # Simple named list: 
#>   list(mean = mean, median = median)
#> 
#>   # Auto named with `tibble::lst()`: 
#>   tibble::lst(mean, median)
#> 
#>   # Using lambdas
#>   list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))

mtcars数据集为例

library(dplyr)

您可以始终使用summarise来避免长语法:

mtcars %>%
  group_by(cyl) %>% 
  summarise(mean_mpg = mean(mpg, na.rm=T),
            sd_mpg = sd(mpg, na.rm = T))

我不知道我的回答是否会为之前的评论添加一些内容。希望是的。

在我的案例中,我有一个数据库,来自两组(对照组,exp)的实验,这两组对特定变量(天)具有不同的水平,我想得到每个组对变量天的特定水平的另一个变量(重量)的平均值和sd的摘要。

以下是我的数据库示例:

animal    group           day       weight      
1.1       "control"       73        NA   
1.2       "control"       73        NA   
3.1       "control"       73        NA   
9.2       "control"       73        25.2  
9.3       "control"       73        23.4  
9.4       "control"       73        25.8   
2.1       "exp"           73        NA       
2.2       "exp"           73        NA     
10.1      "exp"           73        24.4     
10.2      "exp"           73        NA     
10.3      "exp"           73        24.6

因此,例如,在这种情况下,我想得到每个组(对照组,exp)在第73天的体重平均值和sd,省略NA。

我用这个命令做到了这一点:

data[data$day=="73",] %>% group_by(group) %>% summarise(mean(weight[group == "exp"], na.rm=T),sd(weight[group == "exp"], na.rm=T))
data[data$day=="73",] %>% group_by(group) %>% summarise(mean(weight[group == "control"], na.rm=T),sd(weight[group == "control"], na.rm=T))

dplyr中的summarise_at函数将在特定列汇总数据集,并允许为应用的每个函数删除NA。取虹膜数据集,计算从Sepal.Length到Petal.Width.的变量的平均值和中值

library(dplyr)
summarise_at(iris,vars(Sepal.Length:Petal.Width),funs(mean,median),na.rm=T)

最新更新