有没有办法在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
?或者还有其他(相当优雅)的解决方法吗?
答案 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