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関数は引数を 1 つしか取りませんが、 to だけでなく toにもsummaryBy渡すため、呼び出しで次のエラーが発生します。na.rm=TRUElengthmeansummaryBy

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

引数が にのみ渡されsummaryBy、に渡されないように指定する方法はありますか? または、他の(かなりエレガントな)回避策はありますか?na.rm=TRUEmeanlength

4

1 に答える 1

4

簡単な方法の 1 つは、ラッパーをデフォルトとして定義する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 に答える