簡體   English   中英

dplyr summarise_each 與 na.rm

[英]dplyr summarise_each with na.rm

有沒有辦法指示dplyr使用 summarise_each 和summarise_each na.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版本強烈建議使用的across ,而不是更多的特定功能的summarise_all等。

將以下語法(命名列表中的函數命名)轉換為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的選項。

  • 人們仍然可以指定na.rm = TRUEfuns參數(CF @flodel的回答是:只需更換summarise_eachsummarise_all )。
  • 但你也可以添加na.rm = TRUEfuns說法。

當您想調用多個函數時,這很有用,例如:

編輯

由於評論@Mikko, funs funs()參數現在已(軟)棄用。 可以使用警告給出的建議,請參閱下面的代碼。 na.rm仍然可以指定為內附加參數summarise_all

我使用了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),針對特定變量(天)具有不同的水平,我想獲得每個組的另一個變量(權重)的均值和標准差的摘要可變日的特定水平。

這是我的數據庫的示例:

 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

因此,例如,在這種情況下,我想獲得每個組(對照組、實驗組)在第 73 天的體重平均值和標准差,省略 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))

summarise_at在功能dplyr將總結在特定的列的數據集,並允許施加各功能刪除NAS。 取 iris 數據集並計算從 Sepal.Length 到 Petal.Width 的變量的平均值和中位數。

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

這也可能有幫助! summarize_at(c("voltage","current"), funs(min,max), na.rm =TRUE)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM