サイズが〜1 GBのCSVファイルがあり、ラップトップは基本構成であるため、ExcelまたはRでファイルを開くことができません。しかし、好奇心から、行数を取得したいファイル。できるなら、どうすればいいですか?
Linux/Unixの場合:
wc -l filename
Windowsの場合:
find /c /v "A String that is extremely unlikely to occur" filename
オプション1:
ファイル接続を通じて、count.fields()
はsep
値(ここでは関係ない)に基づいて、ファイルの1行あたりのフィールド数をカウントします。したがって、その結果の長さを取得する場合、理論的にはファイル内の行(および行)の数で終わる必要があります。
_length(count.fields(filename))
_
ヘッダー行がある場合は、_skip = 1
_でスキップできます
_length(count.fields(filename, skip = 1))
_
空白行のスキップなど、特定のニーズに合わせて調整できる引数は他にもあります。
_args(count.fields)
# function (file, sep = "", quote = "\"'", skip = 0, blank.lines.skip = TRUE,
# comment.char = "#")
# NULL
_
詳細については、help(count.fields)
を参照してください。
速度に関してはそれほど悪くはありません。 99846行を含む野球ファイルの1つでテストしました。
_nrow(data.table::fread("Batting.csv"))
# [1] 99846
system.time({ l <- length(count.fields("Batting.csv", skip = 1)) })
# user system elapsed
# 0.528 0.000 0.503
l
# [1] 99846
file.info("Batting.csv")$size
# [1] 6153740
_
(より効率的な)オプション2:別のアイデアは、data.table::fread()
を使用して最初の列のみを読み取り、行数を取得することです。これは非常に高速です。
_system.time(nrow(fread("Batting.csv", select = 1L)))
# user system elapsed
# 0.063 0.000 0.063
_
最初の1000行のサイズに基づいて行数を見積もる
size1000 <- sum(nchar(readLines(con = "dgrp2.tgeno", n = 1000)))
sizetotal <- file.size("dgrp2.tgeno")
1000 * sizetotal / size1000
これは通常、ほとんどの目的には十分であり、巨大なファイルの場合ははるかに高速です。
ここに私が使用したものがあります:
testcon <- file("xyzfile.csv",open="r")
readsizeof <- 20000
nooflines <- 0
( while((linesread <- length(readLines(testcon,readsizeof))) > 0 )
nooflines <- nooflines+linesread )
close(testcon)
nooflines
詳細については、この投稿をご覧ください: https://www.r-bloggers.com/easy-way-of-determining-number-of-linesrecords-in-a-given-large-file-using-r /