我有一个如下所示的数据框:
site date var dil
1 A 7.4 2
2 A 6.5 2
1 A 7.3 3
2 A 7.3 3
1 B 7.1 1
2 B 7.7 2
1 B 7.7 3
2 B 7.4 3
Run Code Online (Sandbox Code Playgroud)
我需要添加一个名wt为此数据框的列,其中包含计算加权平均值所需的加权因子.该加权因子必须被导出的每个组合site和date.
我正在使用的方法是首先构建一个计算weigthing因子的函数:
> weight <- function(dil){
dil/sum(dil)
}
Run Code Online (Sandbox Code Playgroud)
然后为site和的每个组合应用函数date
> df$wt <- ddply(df,.(date,site),.fun=weight)
Run Code Online (Sandbox Code Playgroud)
但我收到此错误消息:
Error in FUN(X[[1L]], ...) :
only defined on a data frame with all numeric variables
Run Code Online (Sandbox Code Playgroud)
And*_*rie 17
你快到了.修改您的代码以使用该transform功能.这允许您在data.frame里面添加列ddply:
weight <- function(x) x/sum(x)
ddply(df, .(date,site), transform, weight=weight(dil))
site date var dil weight
1 1 A 7.4 2 0.40
2 1 A 7.3 3 0.60
3 2 A 6.5 2 0.40
4 2 A 7.3 3 0.60
5 1 B 7.1 1 0.25
6 1 B 7.7 3 0.75
7 2 B 7.7 2 0.40
8 2 B 7.4 3 0.60
Run Code Online (Sandbox Code Playgroud)