Отклонено на одну разницу между количеством, отличным в sqldf () и аккуратным кодом - PullRequest
1 голос
/ 03 марта 2020

Я пытаюсь подсчитать количество различных имен из набора данных в R, используя пакет sqldf, и хотел проверить мой ответ, используя tidy. Я получил немного другой ответ и не мог понять, что его вызвало. Вот мой код:

mayors <- read_csv(file="https://raw.githubusercontent.com/jmontgomery/jmontgomery.github.io/master/PDS/Datasets/Mayors.csv")
mayorsDF <- as.data.frame(mayors)

library(sqldf)
sqldf("select count(distinct FullName) from mayorsDF") # gives me 1406

allNamesDF <- sqldf("select distinct FullName from mayorsDF")
length(allNamesDF$FullName) # gives me 1407

library(tidyverse)
mayors %>% 
    select("FullName") %>%
    unique() %>%
    count() # gives me 1407

Что мне не хватает? Я новичок в пакете sqldf, но не новичок в SQL.

1 Ответ

3 голосов
/ 03 марта 2020

SQL не учитывает нулевые значения как уникальные значения в count distinct, и у вас есть нулевые значения в ваших данных.

sqldf::sqldf("select count(*) as n from mayorsDF where FullName is null")
#    n
# 1 36
allNamesDF <- sqldf::sqldf("select distinct FullName from mayorsDF")
anyNA(allNamesDF)
# [1] TRUE
sum(is.na(allNamesDF))
# [1] 1
length(unique(allNamesDF[!is.na(allNamesDF)]))
# [1] 1406

Связанный: Подсчет нулевых значений как уникального значения

...