6

我想看看人们在 R 中使用大型数据集(即 50 mil + obs)处理面板数据时使用什么:该data.table包很有用,因为它有键并且非常快。该xts软件包很有用,因为它具有执行各种时间序列数据的功能。因此,似乎有两个不错的选择:

  1. 有一个data.table并编写自定义时间序列函数来处理它
  2. 有一个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对象的成本似乎很高。

4

0 回答 0