2015-07-11 22 views
2
foo = data.frame(V1=c(rep("A",4),"B",rep("C",3),"D","D"), 
       V2=c(rep("1",3), rep("2",2), 
         "1", rep("3",2), rep("2",2)), 
       V3=c(1.2,1.4,1.3,1.5,1.6,1.2,1.1,1,1.3,1.4), 
       V4=c(2.2,2.4,2.3,2.5,2.6,2.2,2.1,2,2.3,2.4), 
       V5=c(3.2,3.4,1.3,3.5,1.6,3.2,1.1,1,3.3,3.4)) 

结果将保持V1 & V2的独特组合和每列V3-V5的平均值。示例平均值(1.2,1.4,1.3)= 1.3根据两列的条件找到平均值

foo 
    V1 V2 V3 V4 V5 
1 A 1 1.3 2.2 3.2 
2 A 2 1.5 2.5 3.5 
3 B 2 1.6 2.6 1.6 
4 C 1 1.2 2.2 3.2 
5 C 3 1.1 2.1 1.1 
6 D 2 1.3 2.3 3.3 

回答

5

您可以使用其中一个聚合函数。

library(dplyr) 
foo %>% 
    group_by(V1, V2) %>% 
    summarise_each(funs(mean)) 

或者

library(data.table)#v1.9.4+ 
setDT(foo)[,lapply(.SD, mean) , by =.(V1, V2)] 

或者

library(sqldf) 
nm1 <- toString(sprintf("avg(%s) as %s", 
      names(foo)[3:ncol(foo)], names(foo)[3:ncol(foo)])) 
fn$sqldf('select V1, V2, $nm1 
      from foo 
      group by V1, V2') 

或者使用base R

aggregate(.~V1+V2, foo, mean) 
2

或者使用plyr

library(plyr) 
ddply(foo, .(V1,V2), colwise(mean)) 

使用doBy

library(doBy) 
summaryBy(.~V1+V2 , foo, Fun = mean)