计算R和SQL中的唯一数字

时间:2017-07-26 07:15:38

标签: sql-server r

我有一个我在R和SQL Server中使用的数据。问题是当我在R中搜索特定列的唯一数字时它显示222并且在SQL中它返回216.导致这种差异的问题是什么?

SQL中使用的查询:

Select count(distinct ColName) from TableName

在R:

Length(Unique(DataframeName$Colname))

2 个答案:

答案 0 :(得分:2)

没有实际数据很难说,但R和SQL以不同的方式看待唯一值。 R(更多指向 - unique)会将NA和各种大小的空格视为唯一值:

> unique(c("f","g","f","","  ",NA,NULL))
[1] "f"  "g"  ""   "  " NA 

> length(unique(c("f","g","f","","  ",NA,NULL)))
[1] 5

SQL会将各种大小的 space 视为相同且非唯一:

CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255));
INSERT INTO Persons (PersonID, LastName)
       VALUES (1, 'Rockwell'),(2,''),(4,'Cohen'),(5,' '),(6,'  ');

Select count(distinct LastName) from Persons

将给出答案3

您可以使用R中的str_trim库中的stringr轻松修剪所有尾随和前导空格:

library(stringr)

a <- str_trim(c("f","g","f","","  ",NA,NULL))
unique(a)
[1] "f" "g" ""  NA

答案 1 :(得分:0)

使用library(sqldf)中的包R,您可以在SQL中使用R查询。

例如,您可以通过这种方式计算R中的唯一数字:

library(sqldf)

sqldf('select distinct count (ColName) as count,
ColName
from TableName
group by ColName')