ddply
機能は、plyr
パッケージに、 は通常、(それが大規模なデータセットに遅くなることがあります) 無痛この種の操作を行います。
# Sample data
library(quantmod)
d <- NULL
for(s in c("^GSPC","^N225")) {
tmp <- getSymbols(s,auto.assign=FALSE)
tmp <- Ad(tmp)
names(tmp) <- "price"
tmp <- data.frame(date=index(tmp), id=s, price=coredata(tmp))
d[[s]] <- tmp
}
d <- do.call(rbind, d)
rownames(d) <- NULL
# Sample computations: lag the prices and compute the logarithmic returns
library(plyr)
d <- ddply(
d, "id",
mutate,
previous_price = lag(xts(price,date)),
log_return = log(price/previous_price)
)
ddplyはかなり速くなることができます! .parallel = T引数を追加する .progress = "text"で進行状況を追跡できます –
@ EtienneLow-Décarie:何が遅くなることができます私はこの部分を並列化できないと思います) はdata.frameを多くの小さなdata.framesに分割しています。 私の状況は次のようになります (1行1000,000個の要素で1〜1000個の要素があり、 では 'max'の代わりにユーザー定義関数が使用されます) ' d < - data.frame(g = round(1e5 * rlnorm(1e6))、x = runif(1e6)); d1 < - ddply(d、 "g"、summarize、max(x)) '。 以下ははるかに高速です: 'd2 < - sqldf(" SELECT g、MAX(x)FROM d GROUP BY g ")'。 –
あなたは並列コンピューティングインフラストラクチャの詳細を教えてください。 – Alex