2012-03-21 2 views
1

Я работал с zoo, чтобы использовать запаздывание и различие для данных временных рядов. Я не работаю с набором данных панели, который состоит из фирмы и даты. Это становится очень громоздким, чтобы каждый раз запачкать каждую фирму, а затем объединять результаты. Есть ли хорошие пакеты, которые работают с данными панели в R? В настоящее время я знаю plm. Другие? plm имеет странную проблему: порядок lag (т.е. -1 против +1) точно противоположный zoo и ts, и поэтому я предвижу головную боль вперед. Любые пакеты, которые кому-то нравятся?данные панели в R

ответ

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) 
) 
+1

ddply может быть довольно быстрым! Вы можете использовать свою параллельную функциональность вычислений с библиотеки (DoMC) registerDoMC (2) А добавив .parallel = T аргумент Вы можете отслеживать прогресс с .progress = «текст» –

+1

@ 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 ")'. –

+0

Не могли бы вы подробнее рассказать о инфраструктуре параллельных вычислений? – Alex