R 如何计算一个文件夹中多个csv的行数?
我在一个文件夹中有500多个“.csv”文件。我想计算每个文件中的总行数,因为我想确认我合并的所有文件是否正确 我尝试使用长度(计数/字段),但我希望创建一个循环,以避免逐个执行。我是新手,所以我的编程技能非常基本。有没有一种方法可以使用files=dir(“path”)的代码R 如何计算一个文件夹中多个csv的行数?,r,csv,count,data.table,R,Csv,Count,Data.table,我在一个文件夹中有500多个“.csv”文件。我想计算每个文件中的总行数,因为我想确认我合并的所有文件是否正确 我尝试使用长度(计数/字段),但我希望创建一个循环,以避免逐个执行。我是新手,所以我的编程技能非常基本。有没有一种方法可以使用files=dir(“path”)的代码 length(count.fields(文件,skip=1)) 使用base R时,以下各项应能起作用(fread从FG7的回复中获得的速度比read.csv对于大文件要快,但如果大量情况下read.csv就可以了):
length(count.fields(文件,skip=1))
使用base R时,以下各项应能起作用(fread
从FG7的回复中获得的速度比read.csv
对于大文件要快,但如果大量情况下read.csv
就可以了):
文件使用count.fields
的优点是它不会将文件加载到内存中。
因此,它应该比使用read.csv
或其他函数更快
获取文件列表:
files <- list.files(path, full.names=TRUE)
基准
你在Mac/Linux上吗?只需在命令行上使用wc-l/path/to/for/*
,您也可以使用system
功能从R控制台传递该命令。
files <- list.files(path, full.names=TRUE)
lapply(X = files, FUN = function(x) {
length(count.fields(x, skip = 1))
})
library(rbenchmark)
benchmark("count.fields" = {
lapply(X = files, FUN = function(x) {
length(count.fields(x, skip = 1))
})
},
"read.csv" = {
lapply(X = files, FUN = function(x) {
nrow(read.csv(x, skip = 1))
})
},
"fread" = {
lapply(X = files, FUN = function(x) {
nrow(data.table::fread(x, skip = 1))
})
},
replications = 1000,
columns = c("test", "replications", "elapsed",
"relative", "user.self", "sys.self"))
test replications elapsed relative user.self sys.self
1 count.fields 1000 0.81 1.000 0.28 0.50
3 fread 1000 6.24 7.704 4.57 1.66
2 read.csv 1000 2.93 3.617 2.16 0.76