У меня есть несколько разных txt файлов с одинаковой структурой. Теперь я хочу прочитать их в R, используя fread, а затем объединить их в более крупный набор данных.
## 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 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
для достижения вертикального соединения, например rbind
и union
в sql
?
Спасибо.