Если я попытаюсь получить среднее значение c(NA, NA, 3, 4, 5, 6, 7, 8, 9, 10)
, используя AVG
из SQL, я получу значение 5,2 вместо ожидаемых 6,5.
# prepare data and write to file
write.table(data.frame(col1 = c(NA, NA, 3:10)),
"my.na.txt", row.names = FALSE)
mean(c(NA, NA, 3:10), na.rm = TRUE) # 6.5
my.na <- read.csv.sql("my.na.txt", sep = " ",
sql = "SELECT AVG(col1) FROM file") # 5.2
# this is identical to
sum(3:10)/10
unlink("my.na.txt") # remove file
Это наводит меня на мысль, что sql(df) рассматривает значения NA как нулевые. Можно ли игнорировать (исключать) значения NA в вызове SQL, как это можно сделать с использованием аргумента na.rm
(в R)?
?sqldf
говорит: ПодпрограммыdbWriteTable/sqliteImportFile
, которыеsqldf
использует для передачи файлов в базу данных, предназначены для скорости и не так гибки, какread.table
. Хотя, возможно, это и не идеальное решение, аргументfilter
дляread.csv.sql
можно использовать для фильтрации строкNA
до того, как они будут прочитаны в SQLite. Несколько примеров аргументаfilter
в?sqldf
и на главной странице sqldf: sqldf.googlecode.com . - person G. Grothendieck   schedule 14.01.2012