2012-06-20 35 views
2

有沒有辦法在summaryBy中爲不同的函數指定不同的NA操作?例如,假設我需要數據集中各組的觀察值的均值和數量。我可以這樣做:有什麼辦法可以爲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水井爲mean,所以summaryBy通話提供了以下錯誤:

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

是否有某種方式來內summaryByna.rm=TRUE參數中指定應只通過mean而不是length?還是有其他一些(相當優雅的)解決方法?

回答

4

一種簡單的方法是在作爲默認值,定義一個包圍mean的包裝。

例如:

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 
相關問題