gpt4 book ai didi

r - 使用 data.table 快速读取并组合多个文件(使用 fread)

转载 作者:行者123 更新时间:2023-12-01 19:11:47 25 4
gpt4 key购买 nike

我有几个具有相同结构的不同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)

代码工作正常,但速度不尽如人意。每个 txt 文件有 1M 个观测值和 12 个字段。

如果我使用fread读取单个文件,速度很快。但是使用apply的话,速度就极其慢了,显然比逐个读取文件要花很多时间。我想知道这里出了什么问题,速度增益有什么改进吗?

我尝试了 plyr 包中的 llply,速度没有太大提升。

此外,data.table中是否有任何语法可以实现像sql中的rbindunion这样的垂直连接>?

谢谢。

最佳答案

使用rbindlist(),它旨在将data.table列表rbind在一起。 ..

mylist <- lapply(all.files, readdata)
mydata <- rbindlist( mylist )

正如@Roland所说,不要在函数的每次迭代中设置 key !

总而言之,这是最好的:

l <- lapply(all.files, fread, sep=",")
dt <- rbindlist( l )
setkey( dt , ID, date )

关于r - 使用 data.table 快速读取并组合多个文件(使用 fread),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21156271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com