使用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"
太难了,但是如果你经常这么做就太费时了!
答案 0 :(得分: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....
答案 1 :(得分:3)
对于您的示例中的简单重塑,您只需在基数R中使用aggregate
,它可以执行您想要的操作,而无需指定列名称:
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
.....
答案 2 :(得分:1)
在reshape::cast
中,无法设置默认列名称,但在reshape2::dcast
中它是(无论如何都可以使用,因为它更快)。使用您的示例:
dcast (mtcars, cyl + hp ~ "colname", mean)