我希望用我的所有列的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))
这样的东西......
感谢
答案 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)