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和amp;的独特组合。 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
答案 0 :(得分: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)
答案 1 :(得分:2)
或使用plyr
library(plyr)
ddply(foo, .(V1,V2), colwise(mean))
使用doBy
library(doBy)
summaryBy(.~V1+V2 , foo, Fun = mean)