Я работал с zoo
, чтобы использовать запаздывание и различие для данных временных рядов. Я не работаю с набором данных панели, который состоит из фирмы и даты. Это становится очень громоздким, чтобы каждый раз запачкать каждую фирму, а затем объединять результаты. Есть ли хорошие пакеты, которые работают с данными панели в R? В настоящее время я знаю plm
. Другие? plm
имеет странную проблему: порядок lag
(т.е. -1 против +1) точно противоположный zoo
и ts
, и поэтому я предвижу головную боль вперед. Любые пакеты, которые кому-то нравятся?данные панели в R
1
A
ответ
1
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 может быть довольно быстрым! Вы можете использовать свою параллельную функциональность вычислений с библиотеки (DoMC) registerDoMC (2) А добавив .parallel = T аргумент Вы можете отслеживать прогресс с .progress = «текст» –
@ EtienneLow-Decarie: Что может быть медленным (и я думаю, что эта часть не может быть распараллелирована). - это разделение data.frame на множество меньших данных. Моя ситуация выглядела так: (1 миллион строк, 100 000 групп с 1 до 1000 элементами в каждом, с пользовательской функцией вместо 'max'): ' d <- data.frame (g = round (1e5) * rlnorm (1E6)), х = runif (1E6)); d1 <- ddply (d, "g", суммировать, max (x)) '. Следующее намного быстрее: 'd2 <- sqldf (" SELECT g, MAX (x) FROM d GROUP BY g ")'. –
Не могли бы вы подробнее рассказать о инфраструктуре параллельных вычислений? – Alex