ddply +汇总函数列名输入

时间:2012-10-04 09:57:04

标签: r plyr

我正在尝试从ddply包中使用summariseplyr,但是在解析通过不断更改的列名时很难...在我的示例中我想要一些东西将以编程方式解析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参数的向量值...但由于某些原因,它们似乎都不起作用......

任何想法?

1 个答案:

答案 0 :(得分:5)

虽然这可能不是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"的变量的名称等。这取决于您希望以编程方式访问该列的方式。