如何处理SQlite中的N / A值?

时间:2018-10-23 13:57:15

标签: r sqlite

我们如何直接从数据库中将SQL函数用作AVG的N / A值?

"SELECT relig, 
 AVG(age) as avg_age, 
 AVG(tvhours) as avg_tvhours, 
 count(*) as n, 
 FROM gss_cat
 GROUP BY relig"

由于数据集中的N / A值,以下内容无法在SQLite中使用。

2 个答案:

答案 0 :(得分:0)

SQLite支持将null用作NA。使用内置的BOD数据框。

BOD$Time[6] <- NA
BOD$Time
## [1]  1  2  3  4  5 NA

library(sqldf)

mean(BOD$Time, na.rm = TRUE)
## [1] 3
sum(BOD$Time, na.rm = TRUE)
## [1] 15

sqldf("select avg(Time), sum(Time) from BOD")
##   avg(Time) sum(Time)
## 1         3        15

答案 1 :(得分:0)

此答案假设您要查询的是SQLite,而不是R。假设某些列中有N/A个值,仍然可以通过对CASE表达式求平均值来使查询正常工作:

SELECT
    relig,
    AVG(CASE WHEN age <> 'N/A' THEN age ELSE NULL END) AS avg_age,
    AVG(CASE WHEN tvhours <> 'N/A' THEN tvhours ELSE END) AS avg_tvhours,
    COUNT(*) AS n
FROM gss_cat
GROUP BY relig;

这应该起作用,因为AVG会忽略SQLite中的NULL值。因此,通过将N/A替换为NULL,我们有效地将其从计算中删除。