使用 dplyr 为所有列排除零和 na 的平均值

Mos*_*afa 7 r dplyr

我想用 dplyr 包为我的所有列做一个数据帧的平均值。

n = c(NA, 3, 5) 
s = c("aa", "bb", "cc") 
b = c(3, 0, 5) 
df = data.frame(n, s, b)
Run Code Online (Sandbox Code Playgroud)

在这里,我希望我的函数使我尝试过的 n 和 b 列的均值 = 4,mean(df$n[df$n>0])但这对于大型数据框来说并不容易。我想要类似df %>% summarise_each(funs(mean))......谢谢

Moo*_*per 5

如果您不想要 0,那么您可能将它们视为 NA,所以让我们明确说明一下,然后用以下内容总结数字列na.rm = TRUE

library(dplyr)
df[df==0] <- NA
summarize_if(df, is.numeric, mean, na.rm = TRUE)
#   n b
# 1 4 4
Run Code Online (Sandbox Code Playgroud)

作为一个班轮:

summarize_if(`[<-`(df, df==0, value= NA), is.numeric, mean, na.rm = TRUE)
Run Code Online (Sandbox Code Playgroud)

并在基数中R(结果为命名数字向量)

sapply(`[<-`(df, df==0, value= NA)[sapply(df, is.numeric)], mean, na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)