Вы можете использовать способность из data.table::fread()
, чтобы выполнить команду и «прочитать» полученный результат.
Я предполагаю, что вы используете Windows, поэтому у вас есть доступ к findstr
-функции в командной строке.
Таким образом, если вы можете построить регулярное выражение, которое «попадает» в строки, которые вы хотите извлечь, вы можете отфильтровать нужные строки перед чтением всего файла в R. Это (потенциально) огромная экономия памяти для больших файлов, и может значительно ускорить ваш рабочий процесс.
образец данных
lat говорит, чтоordins.csv выглядит так:
id,latitude,longitude
1,10,11
2,11,12
3,12,13
4,13,14
5,14,15
В этом примере вы хотите извлечь строки с широтами между 12 и 14 и долготами между 11 и 13
код
#build a list of files (I created only one)
#make sure you use the full path (not relative)
x <- list.files( path = "C:/folder", pattern = "coord.csv", full.names = TRUE )
#build reges that only hits on rows with:
# latitude 12-14
# longitude 11-13
pattern = "^[0-9],1[2-4],1[1-3]$"
#read the file(s), extract the lines with match the regex-pattern
#and bind the resuklt to a data.table
rbindlist( lapply( x, function(x) {
fread( cmd = paste0( "findstr /R ", pattern, " ", x ), header = FALSE )
} ) )
выход
V1 V2 V3
1: 3 12 13