根据两列条件找到平均值

Ant*_*tex 2 r lapply

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))
Run Code Online (Sandbox Code Playgroud)

结果将保持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
Run Code Online (Sandbox Code Playgroud)

akr*_*run 5

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

library(dplyr)
foo %>%
    group_by(V1, V2) %>% 
    summarise_each(funs(mean))
Run Code Online (Sandbox Code Playgroud)

要么

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

要么

 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')
Run Code Online (Sandbox Code Playgroud)

或使用 base R

 aggregate(.~V1+V2, foo, mean)
Run Code Online (Sandbox Code Playgroud)