如何计算一个文件夹中多个csv的行数?

时间:2019-08-25 01:53:49

标签: r csv count data.table

我在一个文件夹中有500多个“ .csv”文件。我想计算每个文件中的总行数,因为我想确认我合并的所有文件的合并是否正确。

我尝试使用length(count / fields),但是我想创建一个循环以避免一个接一个地执行。我是R的新手,所以我的编程技能非常基础。有没有办法我可以使用带有files = dir(“ path”)的代码?

length(count.fields(files, skip = 1))

2 个答案:

答案 0 :(得分:1)

使用基数R,以下操作应该可以工作(对于大文件,FG7的回复中的freadread.csv快,但是如果很多情况下,read.csv也可以):

files<-list.files(your.folder, full.names=TRUE)
file.lengths<-unlist(lapply(file, function(x) nrow(read.csv(files)))#number of rows per file
sum(file.lengths)#total number of rows in all files

答案 1 :(得分:1)

使用count.fields的优点是它不会将文件加载到内存中。 因此,它应该比使用read.csv或其他函数更快。

获取文件列表:

 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