sqldf() 中的 count distinct 和 tidy 代码相差一个

Off by one difference between count distinct in sqldf() and tidy code

我正在尝试使用 sqldf 包计算 R 中数据集中不同名称的数量,并想使用 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.

的新手

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

相关:Counting null values as unique value