我们如何直接从数据库中将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中使用。
答案 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
,我们有效地将其从计算中删除。