我有一个我在R和SQL Server中使用的数据。问题是当我在R中搜索特定列的唯一数字时它显示222并且在SQL中它返回216.导致这种差异的问题是什么?
SQL中使用的查询:
Select count(distinct ColName) from TableName
在R:
Length(Unique(DataframeName$Colname))
答案 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')