如果我试图使用SQL中的AVG
函数计算c(NA, NA, 3, 4, 5, 6, 7, 8, 9, 10)
的平均值,得到的结果是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值视为零。在SQL调用中是否可能忽略(排除)NA值,就像在R中使用na.rm参数一样?
sqldf
使用的dbWriteTable/sqliteImportFile
程序来将文件传输到数据库中,这些程序用于加速,但灵活性不如read.table
。”虽然可能不是最理想的解决方案,但可以使用read.csv.sql
的filter
参数在将行读入 SQLite 之前过滤掉NA
行。 在“?sqldf”和 sqldf 主页上有一些关于filter
参数的示例:http://sqldf.googlecode.com。 - G. Grothendieck