Как обрабатывать значения N / A в SQlite? - PullRequest
0 голосов
/ 23 октября 2018

Как мы можем использовать функции 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"

Следующее нельзя использовать в SQLite из-за значений N / A в наборе данных.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

В этом ответе предполагается, что вы спрашиваете о 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 игнорирует NULL значения в SQLite.Таким образом, заменив N/A на NULL, мы фактически удалим его из расчета.

0 голосов
/ 23 октября 2018

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...