R:使用fread或等效文件从文件中随机读取?

时间:2017-10-17 21:37:24

标签: r

我有一个非常大的数GB文件,加载到内存中的成本太高。但是,文件中行的顺序不是随机的。有没有办法使用类似fread的东西读取行的随机子集?

例如这样的事情?

data <- fread("data_file", nrows_sample = 90000)

github post表明一种可能性就是做这样的事情:

fread("shuf -n 5 data_file")

然而,这对我不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

使用tidyverse(而不是data.table),你可以这样做:

virtual

答案 1 :(得分:1)

如果您的数据文件恰好是文本文件,那么使用包LaF的解决方案可能很有用:

library(LaF)

# Prepare dummy data
mat <- matrix(sample(letters,10*1000000,T), nrow = 1000000)

dim(mat)
#[1] 1000000      10

write.table(mat, "tmp.csv",
    row.names = F,
    sep = ",",
    quote = F)

# Read 90'000 random lines
start <- Sys.time()
random_mat <- sample_lines(filename = "tmp.csv",
    n = 90000,
    nlines = 1000000)
random_mat <- do.call("rbind",strsplit(random_mat,","))
Sys.time() - start
#Time difference of 1.135546 secs    

dim(random_mat)
#[1] 90000    10