4

ddplyパッケージからsummarise一緒に使用しようとしていplyrますが、変化し続ける列名を解析するのに問題があります...私の例では、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' must be numeric

また、corのx引数のベクトル値を解析する他のさまざまなコンボを試しました...しかし、何らかの理由で、それらのいずれも機能していないようです...

何か案は?

4

1 に答える 1

5

これはおそらく意図された使用法ではなく、summarize問題に対してはるかに優れたアプローチが必要ですが、質問に対する直接の答えは次を使用することgetです。

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

編集:これは、たとえば、私の意見ではあなたの問題により適している1つのアプローチです:

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

上記では、またはを保持する変数の名前などに"X1"置き換えることもできます。これは、プログラムで列にアクセスする方法によって異なります。2"X1"

于 2012-10-04T10:11:10.343 に答える