【问题标题】:ddply + summarise function column name inputddply + 汇总函数列名输入
【发布时间】:2012-10-04 09:57:04
【问题描述】:

我正在尝试将plyr 包中的ddplysummarise 一起使用,但是在解析不断变化的列名时遇到了困难...在我的示例中,我想要以编程方式在X1 中解析的东西,而不是而不是在 X1 中硬编码到 ddply 函数中。

树立榜样

require(xts)
require(plyr)
require(reshape2)
require(lubridate)
t <- xts(matrix(rnorm(10000),ncol=10), Sys.Date()-1000:1)
t.df <- data.frame(coredata(t))
t.df <- cbind(day=wday(index(t), label=TRUE, abbr=TRUE), t.df)
t.df.l <- melt(t.df, id.vars=c("day",colnames(t.df)[2]), measure.vars=colnames(t.df)[3:ncol(t.df)])

这是我正在努力解决的问题......

cor.vars <- ddply(t.df.l, c("day","variable"), summarise, cor(X1, value))

我不想使用 X1 这个词,而是想使用类似的东西

cor.vars <- ddply(t.df.l, c("day","variable"), summarise, cor(colnames(t.df)[2], value))

但这会出现错误:Error in cor(colnames(t.df)[2], value) : 'x' must be numeric

我还尝试了各种其他组合,它们在 cor 中解析 x 参数的向量值...但由于某种原因,它们似乎都不起作用...

有什么想法吗?

【问题讨论】:

  • 您能否让您的示例可重现?加载 plyrreshape2xts 包后仍然出现错误。
  • 添加到 libridate 包中...作为必需的库...

标签: r plyr


【解决方案1】:

虽然这可能不是 summarize 的预期用途,并且必须有更好的方法来解决您的问题,但您的问题的直接答案是使用 get

ddply(t.df.l, c("day","variable"), summarise, cor(get(colnames(t.df)[2]), value))

编辑:例如,我认为这是一种更适合您的问题的方法:

ddply(t.df.l, c("day", "variable"), function(x)cor(x["X1"], x["value"]))

上面,"X1" 也可以替换为2 或持有"X1" 的变量的名称等。这取决于您希望如何以编程方式访问该列。

【讨论】:

  • 非常感谢....如果这不是 summarise 的用途...那么有没有更好的方法来完成上述操作?
猜你喜欢
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多