我想将data.frame中的数据分组为两列,然后对特定的第三列求和.例如:
> aggregate(mpg~gear+cyl, data=mtcars, FUN=sum)
gear cyl mpg
1 3 4 21.5
2 4 4 215.4
3 5 4 56.4
4 3 6 39.5
5 4 6 79.0
6 5 6 19.7
7 3 8 180.6
8 5 8 30.8
Run Code Online (Sandbox Code Playgroud)
现在,我需要为不同的列多次执行此操作.所以我想编写一个概括它的函数.它采用data.frame和其中一个列(为了简单起见)并做同样的事情.
agg.data <- function(df, colname) {
aggregate(mpg~gear+colname, data=df, FUN=sum)
}
Run Code Online (Sandbox Code Playgroud)
运行这将产生:
Error in eval(expr, envir, enclos) : object 'colname' not found
Run Code Online (Sandbox Code Playgroud)
如何将colname的值传递给聚合?
将公式的字符串表示粘贴在一起,并将该字符串作为参数传递给formula()...
agg.data <- function(df, colname) {
aggregate(formula(paste0("mpg~gear+", colname)), data=df, FUN=sum)
}
> agg.data(mtcars, "cyl")
gear cyl mpg
1 3 4 21.5
2 4 4 215.4
3 5 4 56.4
4 3 6 39.5
5 4 6 79.0
6 5 6 19.7
7 3 8 180.6
8 5 8 30.8
Run Code Online (Sandbox Code Playgroud)