如何在 R 中使用 readLines 读取特定范围内的所有行?
How to use readLines in R to read all lines between a certain range?
我正在尝试将一个大型 JSONL(.gz) 文件拆分为多个 .csv 文件。我已经能够使用下面的代码为前 25.000 个条目创建一个有效的 .csv 文件。我现在想读取并解析 25.001 到第 50.000 行,但一直做不到。我觉得这应该很容易完成,但到目前为止我的搜索没有结果。
有没有办法将 readLiness 函数中的 'n' 因子操纵到 select 特定范围的行?
(p.s。我在学习;))
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)
readr
包中的 read_lines()
函数比 base::readLines()
更快,可用于指定读取的开始和结束行。例如:
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年间美国超过900,000次极端天气事件的发生地点、事件类型和破坏信息。我们将在下载解压后使用readr::read_lines()
以25,000组为一组阅读前50,000行文件。
警告:zip 文件大约有 50Mb。
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)
...以及在 RStudio 环境查看器中查看的对象:
以下是在配备英特尔 i7-6500U 处理器的 HP Spectre x-360 笔记本电脑上比较 base::readLines()
和 readr::read_lines()
的性能时序。
> # 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
我正在尝试将一个大型 JSONL(.gz) 文件拆分为多个 .csv 文件。我已经能够使用下面的代码为前 25.000 个条目创建一个有效的 .csv 文件。我现在想读取并解析 25.001 到第 50.000 行,但一直做不到。我觉得这应该很容易完成,但到目前为止我的搜索没有结果。
有没有办法将 readLiness 函数中的 'n' 因子操纵到 select 特定范围的行?
(p.s。我在学习;))
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)
readr
包中的 read_lines()
函数比 base::readLines()
更快,可用于指定读取的开始和结束行。例如:
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年间美国超过900,000次极端天气事件的发生地点、事件类型和破坏信息。我们将在下载解压后使用readr::read_lines()
以25,000组为一组阅读前50,000行文件。
警告:zip 文件大约有 50Mb。
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)
...以及在 RStudio 环境查看器中查看的对象:
以下是在配备英特尔 i7-6500U 处理器的 HP Spectre x-360 笔记本电脑上比较 base::readLines()
和 readr::read_lines()
的性能时序。
> # 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