9

reshape::cast を使用する場合、結果の列の名前を設定する方法はありますか?

例:

library(reshape)
data(mtcars)
cast(mtcars, cyl + hp ~ .,mean)

   cyl  hp (all)
1    4  52     2
2    4  62     2
3    4  65     1
4    4  66     1
5    4  91     2

の代わりに(all)、キャストの呼び出し内で名前を設定できるようにしたいと思います。これは可能ですか?

わかる、わかる、タイピングcolnames(x)[3] <- "Foo"が難しすぎるみたいだけど、頻繁にやらなければならないのは時間がかかる!

4

3 に答える 3

6

求める機能を提供する新しいラッパーを作成します (つまり、それを行う既存の引数が見つかりませんでした)。

bcast <- function(... , agg.name =NA){ res <- cast(...)
             if(!is.na(agg.name)){ names(res)[length(res)] <- agg.name } 
             res}
bcast(mtcars, cyl + hp ~ . ,  fun.aggregate= mean, agg.name="test")

#--------
#Using carb as value column.  Use the value argument to cast to override this choice
#   cyl  hp test
1    4  52    2
2    4  62    2
3    4  65    1
4    4  66    1
5    4  91    2
6    4  93    1
7    4  95    2
snipped output....
于 2012-07-06T04:10:48.690 に答える
3

例のような単純な形状aggregate変更の場合、列名を指定する必要なく、必要な処理を行うベース R で使用できます。

aggregate(carb~cyl+hp, mtcars, FUN=mean)

   cyl  hp carb
1    4  52    2
2    4  62    2
3    4  65    1
4    4  66    1
5    4  91    2
.....

または、すべての列で:

aggregate(.~cyl+hp, mtcars, FUN=mean)

   cyl  hp      mpg     disp     drat       wt     qsec        vs        am     gear carb
1    4  52 30.40000  75.7000 4.930000 1.615000 18.52000 1.0000000 1.0000000 4.000000    2
2    4  62 24.40000 146.7000 3.690000 3.190000 20.00000 1.0000000 0.0000000 4.000000    2
3    4  65 33.90000  71.1000 4.220000 1.835000 19.90000 1.0000000 1.0000000 4.000000    1
4    4  66 29.85000  78.8500 4.080000 2.067500 19.18500 1.0000000 1.0000000 4.000000    1
5    4  91 26.00000 120.3000 4.430000 2.140000 16.70000 0.0000000 1.0000000 5.000000    2
 .....
于 2012-07-06T08:21:12.337 に答える
1

ではreshape::castデフォルトの列名を設定することはできませんが、設定は可能reshape2::dcastです (方法が速いため、とにかく使用できます)。あなたの例を使用して:

dcast (mtcars, cyl + hp ~ "colname", mean)
于 2013-11-19T23:10:17.137 に答える