2

有没有办法为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=TRUElength以及 to mean,因此summaryBy调用给出以下错误:

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

有没有办法指定参数summaryBy应该na.rm=TRUE只传递给mean而不是传递给length?还是有其他(相当优雅的)解决方法?

4

1 回答 1

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
于 2012-06-20T18:52:30.787 回答