有什么方法可以在summaryBy中为不同的函数指定不同的NA动作?

时间:2012-06-20 18:41:46

标签: r grouping

有没有办法在summaryBy中为不同的函数指定不同的NA动作?例如,假设我想要数据集中各组的平均值和观察数。我可以这样做:

library(doBy)
var1 = c(10.5,15,6.2,3.5,NA,NA)
group = c("A","B","B","A","B","A")
df = data.frame(var1, group)
summaryBy(var1 ~ group, data=df, FUN=c(mean,length), na.rm=TRUE)

您需要na.rm = TRUE,以便mean函数可以使用缺失值。但是,length函数只接受一个参数,但summaryBy只将na.rm=TRUE传递给length以及mean,因此summaryBy调用出现以下错误:

Error in currFUN(x, ...) : 
2 arguments passed to 'length' which requires 1

是否有某种方法可以在summaryBy中指定na.rm=TRUE参数只应传递给mean而不传递给length?或者还有其他(相当优雅)的解决方法吗?

1 个答案:

答案 0 :(得分:4)

一种简单的方法是定义mean周围的包装器,默认为na.rm=TRUE

例如:

mean <- function(x)base::mean(x, na.rm=TRUE)
summaryBy(var1 ~ group, data=df, FUN=c(mean,length))

  group var1.mean var1.length
1     A       7.0           3
2     B      10.6           3

你也可以传递一个匿名函数:

rm(mean)
summaryBy(var1 ~ group, data=df, FUN=c(function(x)mean(x, na.rm=TRUE),length))

  group var1.FUN1 var1.FUN2
1     A       7.0         3
2     B      10.6         3