对于具有dplyr的所有列,平均值不包括零和na

时间:2016-03-09 17:00:13

标签: r dplyr

我希望用我的所有列的dplyr包来表达我的数据帧。

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

这里我希望我的函数得到n =和b列的mean = 4 我试过了mean(df$n[df$n>0]),但对于大型数据框来说并不容易。 我想要像df %>% summarise_each(funs(mean))这样的东西...... 感谢

2 个答案:

答案 0 :(得分:1)

如果您不希望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

作为一个班轮:

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

,并以基数R(作为命名的数字矢量)

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

答案 1 :(得分:0)

C优雅的大卫回答:

df %>% summarise_each(funs(mean(.[!is.na(.) & . != 0])), -s) 

df %>% summarise_each(funs(mean(.[. != 0], na.rm = TRUE)), -s)