我想看看人们在 R 中使用大型数据集(即 50 mil + obs)处理面板数据时使用什么:该data.table
包很有用,因为它有键并且非常快。该xts
软件包很有用,因为它具有执行各种时间序列数据的功能。因此,似乎有两个不错的选择:
- 有一个
data.table
并编写自定义时间序列函数来处理它 - 有一个
xts
对象列表,并lapply
在每次您想做某事时在该列表上运行。最终这将需要合并到一个data.frame
做回归等。
我知道这个plm
包,但没有发现它对数据管理有用,因为上面的两个选项。你们都用什么?关于什么时候最有效的任何想法?
让我提出一个场景:想象有 N 个公司,有 T 个时间段,其中 N>>0 和 T>>0。data.table
如果我想将每个公司滞后 1 个时间段,将会非常快,例如:
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
对象的成本似乎很高。