1

我有一个包含 2 个字符串和 6 个整数列的 1,000,000 行的大型 data.frame。顺序遍历这个 data.frame 需要花费大量时间,即使没有修改它。这是我正在使用的基本循环:

for( i in 1:1000000 ) {
  varA = mydf[i, "varA"]
  varB = mydf[i, "varB"]
  ...
}

处理 100 行大约需要 10 秒,我有几个 1M 的数据块要处理。我不需要修改 data.frame,但我确实需要按顺序读取行(这就是为什么我选择运行 for 循环而不是调用 apply)。

在这种情况下,您更愿意使用 data.table 还是 bigmemory 对象?

4

1 回答 1

0

使用数据表:

setDT(mydf)[, c('varA', 'varB')]

例如:

> mydf <- data.table(matrix(rnorm(1e8), nc = 100))# 1E6 rows
> colnames(mydf) <- paste0('var', 1:100)

使用 data.table 包

> head(mydf[, c('var50', 'var75')])

       var50      var75
1: 1.77199144  2.32235675
2: 0.06925491 -1.03333482
3: 0.05529698 -0.56474744
4: 0.07815707  0.06754285
5: 0.20430406 -2.31359882
6: 1.26963312 -1.18745481

机器时间:

> system.time(mydf[, c('var50', 'var75')])


user  system elapsed 
0.00    0.01    0.02
于 2019-05-01T23:42:06.883 回答