R聚合函数有两个值

时间:2016-03-22 09:55:34

标签: r aggregate

假设我有一个带两个向量的函数:

someFunction <- function(x,y){
  return(mean(x+y));
}

并说我有一些数据

toy <- data.frame(a=c(1,1,1,1,1,2,2,2,2,2), b=rnorm(10), c=rnorm(10))

我想要做的是为someFunction的每个值返回函数toy$a的结果,即我希望获得与代码相同的结果

toy$d <- toy$b + toy$c
result <- aggregate(toy$d, list(toy$a), mean)

然而,在现实生活中,函数someFunction 方式更复杂,而需要两个输入,因此这个玩具示例中的解决方法是不可能的。所以,我想做的是:

  • 根据一列对数据集进行分组。
  • 对于列中的每个值(在玩具示例中,为1和2),取两个向量v1v2,然后返回someFunction(v1,v2)

2 个答案:

答案 0 :(得分:2)

library(data.table)
toy <- data.table(toy)
toy[, list(New_col = someFunction(b, c)), by = 'a']

答案 1 :(得分:1)

Checkout dplyr包,特别是group_bysummarize个功能。 假设您要为someFunction(b, c)的每个值计算a,语法看起来像

library(dplyr)
data %>% group_by(a) %>% summarize(someFunction(b, c))