ddply + summarise函数列名称输入

4

我正在尝试同时使用plyr包中的ddplysummarise,但是在处理列名不断变化的情况下遇到了困难...在我的示例中,我希望能够以程序方式解析X1,而不是在ddply函数中硬编码X1。

设置一个例子

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' 必须是数值类型

我还尝试了各种不同的组合,将向量值解析到cor函数的x参数中...但出于某种原因,它们都似乎无法正常工作...

有什么想法吗?


请问您能否让您的示例可重现吗?在加载了“plyr”、“reshape2”和“xts”包后,我仍然会遇到错误。 - flodel
在libridate包中添加了作为必需库的内容。 - h.l.m
1个回答

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"。具体取决于你想如何以编程方式访问该列。

太棒了,谢谢...如果summarise不是为此而设计的话...那么有更好的方法来完成以上任务吗? - h.l.m

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接