首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中使用readLines来读取某个范围内的所有行?

如何在R中使用readLines来读取某个范围内的所有行?
EN

Stack Overflow用户
提问于 2018-09-03 20:50:49
回答 1查看 5K关注 0票数 4

我正在尝试将一个大的JSONL(.gz)文件拆分成多个.csv文件。我已经能够使用下面的代码为前25.000个条目创建一个有效的.csv文件。我现在想要读取和解析25.001到50.000行,但一直无法这样做。我觉得这应该很容易做到,但我的搜索到目前为止还没有结果。

有没有办法操纵readLiness函数中的'n‘因子来选择特定范围的线?

(附注:我正在学习;))

代码语言:javascript
复制
setwd("filename")

a<-list.files(pattern="(.*?).0.jsonl.gz")
a[1]

raw.data<- readLines(gzfile(a[1]), warn = "T",n=25000) 
rd <- fromJSON(paste("[",paste(raw.data,collapse=','),']'))
rd2<-do.call("cbind", rd) 

file=paste0(a,".csv.gz") 
write.csv.gz(rd2, file, na="", row.names=FALSE)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-04 06:06:14

readr包中的read_lines()函数比base::readLines()更快,可用于指定读取的开始行和结束行。例如:

代码语言:javascript
复制
library(readr)
myFile <- "./data/veryLargeFile.txt"

first25K <- read_lines(myFile,skip=0,n_max = 25000)

second25K <- read_lines(myFile,skip=25000,n_max=25000) 

这是一个使用NOAA StormData数据集的完整的工作示例。该文件描述了1950至2011年间美国超过90万起极端天气事件的位置、事件类型和损失信息。下载并解压缩文件后,我们将使用readr::read_lines()以25,000为一组读取前50,000行。

警告:压缩文件大小约为50Mb。

代码语言:javascript
复制
library(R.utils) 
library(readr)
dlMethod <- "curl"
if(substr(Sys.getenv("OS"),1,7) == "Windows") dlMethod <- "wininet"
url <- "https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2"
download.file(url,destfile='StormData.csv.bz2',method=dlMethod,mode="wb")
bunzip2("StormData.csv.bz2","StormData.csv")

first25K <- read_lines("StormData.csv",skip=0,n_max = 25000)

second25K <- read_lines("StormData.csv",skip=25000,n_max=25000)

...and在RStudio环境查看器中查看的对象:

以下是在采用Inteli7-6500U处理器的HP Spectre x-360笔记本电脑上比较base::readLines()readr::read_lines()的性能时序。

代码语言:javascript
复制
> # check performance of readLines()
> system.time(first25K <- readLines("stormData.csv",n=25000))
   user  system elapsed 
   0.05    0.00    0.04 
> # check performance of readr::read_lines()
> system.time(first25K <- read_lines("StormData.csv",skip=0,n_max = 25000))
   user  system elapsed 
   0.00    0.00    0.01 
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52150149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档