Если ваш файл данных очень большой, и вы хотите, чтобы только строки соответствовали определенному критерию, пакет sqldf
может фильтровать, пока он считывает данные.
Вот пример использования.Я создам двоичный столбец во встроенном наборе данных iris
и запишу новую таблицу на диск.
library(sqldf)
set.seed(1234)
iris1 <- iris
iris1$V4 <- rbinom(nrow(iris1), 1, 0.5)
write.table(iris1, "iris3.dat", sep = ",", quote = FALSE, row.names = FALSE)
Теперь прочитайте данные и отфильтруйте только те строки, где V4 == 0
.
# set up file connection
iris3 <- file("iris3.dat")
df1 <- sqldf('select * from iris3 where "V4" = 0')
close(iris3)
Сравните с результатом subset
.
df2 <- subset(iris1, V4 == 0)
row.names(df2) <- NULL
all.equal(df1, df2)
#[1] "Component “Species”: Modes: character, numeric"
#[2] "Component “Species”: Attributes: < target is NULL, current is list >"
#[3] "Component “Species”: target is character, current is factor"
Окончательная очистка.
unlink("iris3.dat")
rm(iris1, df1, df2)