我有几个不同的txt文件具有相同的 struct .现在我想用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时,速度非常慢,显然比逐个读取文件要花很多时间.我想知道哪里出了问题,速度增益有什么改进吗?

我试过llply英寸plyr包,速度没有太大提高.

此外,data.table中是否有任何语法可以实现垂直连接,比如sql中的rbindunion

谢谢

推荐答案

使用rbindlist(),这是设计为rbinddata.tablelist一起...

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

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

总之,这是最好的:

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

R相关问答推荐

更新合适的R mgcv::bam模型报告无效类型(关闭).'';错误

基于shiny 应用程序中的日期范围子集xts索引

根据收件箱中的特定值提取列名

根据R中两个变量的两个条件删除带有dspirr的行

提取具有连续零值的行,如果它们前面有R中的有效值

是否可以创建一个ggplot与整洁判断的交互作用

Ggplot2中的重复注记

R中插入符号训练函数的中心因子和尺度因子预测

如何对2个列表元素的所有组合进行操作?

将标识符赋给事件序列,避免错误观察

有没有可能用shiny 的书签恢复手风琴面板?

如何使这些react 表对象相互独立?

如何创建累加到现有列累计和的新列?

在纵向数据集中创建新行

如何显示准确的p值而不是<;0.001*?

基于R中的辅助向量中的值有条件地连接向量中的字符串

对R中的列表列执行ROW Mean操作

组合名称具有模式的列表的元素

在R中添加要打印的垂直线

向内存不足的数据帧添加唯一行