【问题标题】:How to use ddply to add a column to a data frame?如何使用 ddply 向数据框中添加列?
【发布时间】:2011-09-27 17:20:23
【问题描述】:

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

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

我需要在此数据框中添加一个名为 wt 的列,其中包含计算加权平均值所需的加权因子。必须为sitedate 的每个组合推导出这个权重因子。

我使用的方法是首先构建一个计算加权因子的函数:

> weight <- function(dil){
                    dil/sum(dil)
                     }

然后为sitedate 的每个组合应用函数

> df$wt <- ddply(df,.(date,site),.fun=weight)

但我收到此错误消息:

Error in FUN(X[[1L]], ...) : 
  only defined on a data frame with all numeric variables

【问题讨论】:

  • 试试df = ddply(df, .(date, site), transform, wt = weight(dil))
  • 感谢 Ramnath,效果很好

标签: r plyr


【解决方案1】:

你快到了。修改您的代码以使用transform 函数。这允许您在ddply 内的data.frame 中添加列:

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

【讨论】:

  • 要使用 ddply 你需要安装 plyr 包
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
相关资源
最近更新 更多