2015-06-20 75 views
1

我想知道是否有任何參數設置,當我做如下的集合體,其結果將顯示原點列名,而不是一般的「group.1」如何顯示變量名而聚集中的R

data1 <- aggregate(mtcars[1:4], list(mtcars$am, mtcars$gear),mean) 
data1 
    Group.1 Group.2  mpg  cyl  disp  hp 
1  0  3 16.10667 7.466667 326.3000 176.1333 
2  0  4 21.05000 5.000000 155.6750 100.7500 
3  1  4 26.27500 4.500000 106.6875 83.8750 
4  1  5 21.38000 6.000000 202.4800 195.6000 

非常感謝,

順便說一句,我知道函數名稱(x)在重塑。

回答

2

你可以試試公式法

aggregate(cbind(mpg,cyl,disp,hp)~am+gear, mtcars, mean) 
# am gear  mpg  cyl  disp  hp 
#1 0 3 16.10667 7.466667 326.3000 176.1333 
#2 0 4 21.05000 5.000000 155.6750 100.7500 
#3 1 4 26.27500 4.500000 106.6875 83.8750 
#4 1 5 21.38000 6.000000 202.4800 195.6000 

在清單內重新命名

aggregate(mtcars[1:4], list(am=mtcars$am, gear=mtcars$gear),mean) 
# am gear  mpg  cyl  disp  hp 
#1 0 3 16.10667 7.466667 326.3000 176.1333 
#2 0 4 21.05000 5.000000 155.6750 100.7500 
#3 1 4 26.27500 4.500000 106.6875 83.8750 
#4 1 5 21.38000 6.000000 202.4800 195.6000 

如果有很多的名字,然後用setNames

aggregate(mtcars[1:4], setNames(list(mtcars$am, mtcars$gear), 
        names(mtcars)[9:10]),mean) 

如果你決定使用dplyr/data.table/sqldf等效代碼爲

library(dplyr) 
    mtcars %>% 
     group_by(am, gear) %>% 
     summarise_each(funs(mean), 1:4) 

使用data.table

library(data.table)#v1.9.5+ 
    as.data.table(mtcars)[, lapply(.SD, mean), by=.(am, gear), .SDcols=1:4] 

使用sqldf

library(sqldf) 
    nm1 <- toString(sprintf("avg(%s) as %s", 
        names(mtcars)[1:4], names(mtcars)[1:4])) 
    fn$sqldf("select am, gear, $nm1 from mtcars group by am, gear") 
+0

嗨akrun,非常感謝你的快速回復,我更喜歡setNames :) – Pommee

+0

但是,我想說,我的名聲太低,無法投票。我會嘗試儘快獲得15點聲望 – Pommee

+1

嗨阿克倫,你是對的。再次感謝你。我認爲如何獲得聲譽的帖子,似乎不容易得到15的速度。我會記住,一旦我得到他們,我會回頭,並給你投票:) – Pommee

1

由於數據幀也是一個列表中使用的第二個參數的數據幀:

aggregate(mtcars[1:4], mtcars[c("am", "gear")], mean) 

,並提供:

am gear  mpg  cyl  disp  hp 
1 0 3 16.10667 7.466667 326.3000 176.1333 
2 0 4 21.05000 5.000000 155.6750 100.7500 
3 1 4 26.27500 4.500000 106.6875 83.8750 
4 1 5 21.38000 6.000000 202.4800 195.6000