我有一个如下所示的数据框:
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
答案 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]))
所有人都会得到同样的答案。我不知道你真的想如何处理“变量”专栏。我不知道它与汇总输出的关系。