【发布时间】:2012-02-10 03:52:20
【问题描述】:
如果我尝试使用 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 值,因为它可以使用 na.rm 参数(在 R 中)来完成?
【问题讨论】:
-
?sqldf说:“sqldf用于将文件传输到数据库的dbWriteTable/sqliteImportFile例程旨在提高速度,它们不如read.table灵活。”尽管可能不是理想的解决方案,但read.csv.sql的filter参数可用于在将NA行读入SQLite 之前过滤掉它们。?sqldf和 sqldf 主页上有一些filter参数的示例:sqldf.googlecode.com。