相关疑难解决方法(0)

更快地读取固定宽度文件的方法

我使用大量固定宽度的文件(即没有分隔字符),我需要读入R.所以,通常有一个列宽度的定义来将字符串解析为变量.我可以read.fwf用来读取数据没有问题.但是,对于大文件,这可能需要长时间.对于最近的数据集,这需要800秒来读取具有~500,000行和143个变量的数据集.

seer9 <- read.fwf("~/data/rawdata.txt", 
  widths = cols,
  header = FALSE,
  buffersize = 250000,
  colClasses = "character",
  stringsAsFactors = FALSE))
Run Code Online (Sandbox Code Playgroud)

freaddata.tableR 中的包中解决大多数数据读取问题非常棒,除了它不解析固定宽度的文件.但是,我可以将每一行读作单个字符串(~500,000行,1列).这需要3-5秒.(我喜欢data.table.)

seer9 <- fread("~/data/rawdata.txt", colClasses = "character",
               sep = "\n", header = FALSE, verbose = TRUE)
Run Code Online (Sandbox Code Playgroud)

关于如何解析文本文件,有很多关于SO的好帖子.见JHoward的建议在这里,创建起始和终止列的矩阵,并substr分析数据.请参阅此处使用的GSee建议strsplit.我无法弄清楚如何使用这些数据.(另外,迈克尔史密斯对data.table邮件列表提出了一些建议,这些建议sed超出了我的实施能力.)现在,使用freadsubstr()我可以在大约25-30秒内完成整个事情.请注意,在结束时强制转换为data.table需要一段时间(5秒?).

end_col <- cumsum(cols)
start_col <- end_col - cols + 1
start_end <- cbind(start_col, end_col) # matrix of start …
Run Code Online (Sandbox Code Playgroud)

substring r apply lapply data.table

41
推荐指数
2
解决办法
1万
查看次数

标签 统计

apply ×1

data.table ×1

lapply ×1

r ×1

substring ×1