我想看看人们用R来处理具有大型数据集(即50 mil + obs)的面板数据:data.table
包很有用,因为它有密钥并且非常快。 xts
包非常有用,因为它具有执行各种时间序列的功能。因此,似乎有两个不错的选择:
data.table
并编写自定义时间序列函数来处理xts
个对象列表,每次你想做某事时都会在该列表上运行lapply
。最终需要将其合并到data.frame
以进行回归等。我知道plm
包,但没有发现它对数据管理有用,就像上面的两个选项一样。你们用的是什么?什么时候最好的想法?
让我提出一个场景:假设有N个公司有T个时间段,其中N> 0且T> 0。如果我想让每个公司滞后一段时间,data.table
将超级快,例如:
x <- data.table(id=1:10, dte=rep(seq(from=as.Date("2012-01-01"), to=as.Date("2012-01-10"), by="day"), each=10), val=1:100, key=c("id", "dte"))
x[,lag_val:=c(NA, head(val, -1)),by=id]
另一种方法可能是:
y <- lapply(ids, function(i) {xts(x[id==i, val], order.by=x[id == i, dte])})
y <- lapply(y, function(obj) { cbind(obj, lag(obj, 1)) })
前者的优势在于它具有大数据的速度。后者的优点是能够执行period.apply
之类的操作并使用xts
的其他功能。有没有让xts
表示更快的技巧?也许是两者的结合?看来,转换为xts
对象的成本很高。