NA des valeurs à l'aide sqldf
Si j'essaie d'avoir une moyenne de c(NA, NA, 3, 4, 5, 6, 7, 8, 9, 10)
à l'aide de AVG
à partir de SQL, j'obtiens une valeur de 5,2, à la place de l'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
Qui m'amène à croire que sql(df) traite NA les valeurs à zéro. Est-il possible d'ignorer (exclure) NA les valeurs dans un appel SQL, car il peut être fait en utilisant na.rm
argument (dans R)?
?sqldf
dit: "Le dbWriteTable/sqliteImportFile
routines qui sqldf
utilise pour transférer des fichiers de la base de données sont conçus pour la vitesse et ils ne sont pas aussi flexibles que read.table
." Mais peut-être pas la solution idéale, le filter
argument de read.csv.sql
peut être utilisé pour filtrer les NA
lignes avant qu'ils sont lus dans SQLite. Il y a quelques exemples de la filter
argument en ?sqldf
et sur la sqldf page d'accueil: sqldf.googlecode.com .OriginalL'auteur Roman Luštrik | 2012-01-14
Vous devez vous connecter pour publier un commentaire.
Modifier votre requête pour ignorer la
NA
valeurs:SELECT AVG(col1) FROM file WHERE col1 IS NOT NULL
et toujours obtenir 5.2.sont les valeurs dans la DB N/A ou NULLE? (select col1 à partir d'un fichier où col1 n'est pas null) [ne la NA de montrer?] ou (Select Col1 à partir d'un fichier où col1 <> 'NA' [ne la NA de montrer?]
À l'aide de
SELECT AVG(col1) FROM file WHERE col1 IS NOT \"NA\"
fonctionne très bien et dandy. Le truc, c'est que les NAs sont cités, et vous devez vous échapper. Merci à vous deux pour l'astuce.OriginalL'auteur mathematical.coffee
Le problème est que le
read.csv.sql
fonction ne reconnaît pas les valeurs manquantes, et les convertit à zéro, au lieu de NULL.Cela ne se produit pas si vous devez d'abord charger les données dans un ensemble de données.cadre, et seulement ensuite appeler
sqldf
.OriginalL'auteur Vincent Zoonekynd