使用apply或ddplyr在R中使用多个参数应用函数

时间:2013-10-20 13:14:03

标签: r

我有一个如下所示的数据框:

Group Variable Value 
A     val1     1 
A     val2     2  
A     val3     3  
B     val1     2  
B     val2     3  
B     val3     4  
C     val1     2  
C     val2     3  
C     val3     5  

我希望应用一个简单的加权函数,该函数以不同的权重为每个组接收所有三个值,如下所示:

calcWeightedVal<-function(val1,val2,val3){ 

  result<-(val1+(2*val2)+(3*val3)) 
  return(result) 
 }

如何最好地应用该函数(使用apply或ddplyr或其他)来获取数据框中汇总的每个组的加权值,如下所示:

Group Weighted_Value 
A     14 
B     20  
C     23

我尝试了ddplyr,但不知道如何传递带有多个参数的自定义函数。

-Justin

1 个答案:

答案 0 :(得分:1)

以下是一些需要考虑的选项。

选项1:ddply没有自定义功能。

library(plyr)
ddply(mydf, .(Group), summarize, V1=(Value[1] + (2 * Value[2]) + (3 * Value[3])))
  Group V1
1     A 14
2     B 20
3     C 23

选项2:ddply具有自定义功能。请注意您的功能的修改。

calcWeightedVal <- function(x) {
  x <- x$Value
  x[1] + (2 * x[2]) + (3 * x[3])
}
ddply(mydf, .(Group), calcWeightedVal)

选项3:来自基地R的aggregate

aggregate(Value ~ Group, mydf, function(x) x[1] + (2 * x[2]) + (3 * x[3]))

所有人都会得到同样的答案。我不知道你真的想如何处理“变量”专栏。我不知道它与汇总输出的关系。