r - 根据两列的条件求平均值

标签 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))

结果将保留 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

最佳答案

您可以使用聚合函数之一。

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)

关于r - 根据两列的条件求平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31358062/

相关文章:

r - 针对异常序列创建 ID

r - l/sapply 忽略条件替换

r - 如何在 R 的 bquote 中为主要情节设置粗体字体?

r - 如何将属性分配给存储在 data.table 中的变量

r - 使用 By() 计算 %changes

r - R中应用函数族的命名/名称

r - 根据组包含的值计算组之间观察计数的差异

r - 在 RStudio 中从源代码安装 R 包时出现问题 - Ubuntu 16.04

r - 通过R中的dplyr将特定的列对收集到行中

r - 访问 R *apply 函数处理的元素的名称