Есть ли способ подсчета строк в R, не загружая сначала данные? [Дубликат]

Программные средства для интерфейса не предоставляют жесткие коды правильно, значит, ваши коды должны быть расширены без нарушения предыдущей функциональности ..... просто расширения, не редактирующие коды prev

14
задан Ohhm Prakash 2 October 2015 в 18:02
поделиться

4 ответа

Для Linux / Unix:

wc -l filename

Для Windows:

find /c /v "A String that is extremely unlikely to occur" filename
23
ответ дан gsamaras 23 August 2018 в 00:55
поделиться

Вот что я использовал:

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 -Из-linesrecords-в-дали-большой файл-с помощью R /

1
ответ дан Narahari B M 23 August 2018 в 00:55
поделиться

Вариант 1:

Через соединение с файлом count.fields() подсчитывает количество полей в строке файла на основе некоторого значения sep (что нам здесь неинтересно). Поэтому, если мы возьмем длину этого результата, теоретически мы должны указать количество строк (и строк) в файле.

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 строк.

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 
15
ответ дан Rich Scriven 23 August 2018 в 00:55
поделиться
0
ответ дан Moritz 5 November 2018 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: