Big*_*hao 31 r fread data.table
我有几个不同的txt文件具有相同的结构.现在我想用fread将它们读入R,然后将它们组合成一个更大的数据集.
## First put all file names into a list
library(data.table)
all.files <- list.files(path = "C:/Users",pattern = ".txt")
## Read data using fread
readdata <- function(fn){
dt_temp <- fread(fn, sep=",")
keycols <- c("ID", "date")
setkeyv(dt_temp,keycols) # Notice there's a "v" after setkey with multiple keys
return(dt_temp)
}
# then using
mylist <- lapply(all.files, readdata)
mydata <- do.call('rbind',mylist)
Run Code Online (Sandbox Code Playgroud)
代码工作正常,但速度不理想.每个txt文件有1M个观察值和12个字段.
如果我用它fread来读取单个文件,那就快了.但是使用apply,那么速度非常慢,显然比逐个读取文件需要花费很多时间.我想知道这里出了什么问题,速度提升有什么改进吗?
我试图llply在plyr包中,有是没有太大的速度上涨.
此外,是否有任何语法data.table实现垂直连接喜欢rbind和unionin sql?
谢谢.
Sim*_*lon 45
使用rbindlist()被设计为rbind一个list的data.table我们一起...
mylist <- lapply(all.files, readdata)
mydata <- rbindlist( mylist )
Run Code Online (Sandbox Code Playgroud)
正如@Roland所说,不要在函数的每次迭代中设置键!
总而言之,这是最好的:
l <- lapply(all.files, fread, sep=",")
dt <- rbindlist( l )
setkey( dt , ID, date )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11092 次 |
| 最近记录: |