Si j'essaie d'obtenir une moyenne de c(NA, NA, 3, 4, 5, 6, 7, 8, 9, 10)
en utilisant AVG
à partir de SQL, j'obtiens une valeur de 5,2 au lieu de la valeur attendue de 6,5.Valeurs NA à l'aide de sqldf
# 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
Ce qui me porte à croire que sql (df) traite les valeurs NA comme zéro. Est-il possible d'ignorer (exclure) les valeurs NA dans un appel SQL comme cela peut être fait en utilisant l'argument na.rm
(en R)?
'dit sqldf': « Les routines 'dbWriteTable/sqliteImportFile' que' sqldf' utilise pour transférer des fichiers vers la base de données sont destinées à la vitesse et ils ne sont pas aussi souples que 'read.table'. » Bien que ce ne soit peut-être pas la solution idéale, l'argument 'filter' de' read.csv.sql' peut être utilisé pour filtrer les lignes 'NA' avant qu'elles ne soient lues dans SQLite. Il y a quelques exemples de l'argument 'filter' dans'? Sqldf' et sur la page d'accueil de sqldf: http://sqldf.googlecode.com. –