2

多くの列と、適用したい特定の要約手順を含むデータフレームがあるとします。baseballデータセットの列2、3、4など、要約したい列がいくつかある場合があります。

   ddply(baseball, .(year), "nrow")
   ddply(baseball, .(stint), "nrow")
   ddply(baseball, .(team), "nrow")

もちろん、もっと複雑な要約を適用して出力の列を増やしたいと思うかもしれませんが、要約が1つの列で行われ、要約したい列がいくつかあるという仮定に固執しましょう。それでは、サマリーの関数を作成して、。(var)に使用する列を簡単に変更できるようにします。

   baseballByCol <- function(col) {
       ddply(baseball, .(baseball[,col]), "nrow")
   }

このALMOSTは機能します。ただし、が目的の場合を除いて、baseballByCol(2)からの出力と同じです。ddply(baseball, .(year), "nrow")colnames(baseballByCol(2))c("baseball[, col]", "nrow")colnames(ddply(baseball, .(year), "nrow"))c("year", "nrow")

もちろん、私たちはそれを解決することができます:

   baseballByCol <- function(col) {
       df <- ddply(baseball, .(baseball[,col]), "nrow")
       colnames(df)[1] <- colnames(baseball)[col]
       return(df)
   }

そして今 、私が使用できるスティントなどで要約すると、baseballByCol(2)からの出力と完全に同じです。ddply(baseball, .(year), "nrow")baseballByCol(3)

しかし、これは少し醜いにおいがします。.(baseball[,col]), "nrow")列名を台無しにする以外に、名前ではなく列インデックスで「by」変数を参照するより良い方法は本当にありませんか?

そして、関数が列インデックスではなく引数として変数名を受け取る、よりクリーンなソリューションはありますか?

4

1 に答える 1

3
baseballByCol <- function(col) {
    ddply(baseball, col, "nrow")
}

インデックスと列名で動作します。

于 2012-12-11T18:07:10.673 に答える