计算R和excel中的唯一值

时间:2013-12-24 10:36:17

标签: r excel

我有一个奇怪的问题。我想计算某列中的唯一条目。这里我附上了我的csv文件。

我这样做是为了获取列中的唯一条目:

dat<-read.csv("Book1.csv")
names(dat)<-c("user_name")
unique(dat$user_name)

结果表明我有170个独特的价值观。

但是当我在Excel中“删除重复的条目”时,我在列中有147个唯一条目。

任何人都可以解释为什么结果不匹配,或者我做错了什么?

访问https://drive.google.com/file/d/0B71VF2HepgVyaFVKSFZrUFhGWm8/edit?usp=sharing获取我的csv文件

2 个答案:

答案 0 :(得分:3)

我的钱很安全。 Excel忽略了大小写的差异。您可以通过将数据转换为大写并注意到您也有147个唯一值来判断:

> d=dat$user_name
> length(unique(d))
[1] 170
> dUp=toupper(d)
> length(unique(dUp))
[1] 147
> 

另请注意,我认为您丢失了CSV中的第一个值,因为read.csv默认认为第一个元素是标题。

答案 1 :(得分:1)

以下是使用VBA-Excel例程和上传文件的案例敏感问题的另一个“证据”。不区分大小写 - &gt; 147和区分大小写 - &gt; 170

    Option Explicit
Sub Uniques()
    Dim v As Variant
    Dim i As Long
    Dim dict As Dictionary

v = Range("a1", Cells(Rows.Count, "A").End(xlUp))

Set dict = New Dictionary
With dict
    .CompareMode = TextCompare
    For i = 1 To UBound(v)
        If Not .Exists(CStr(v(i, 1))) Then _
            .Add Key:=CStr(v(i, 1)), Item:=v(i, 1)
    Next i
Debug.Print "Case Insensitive Uniques", dict.Count
End With

Set dict = New Dictionary
With dict
    .CompareMode = BinaryCompare
    For i = 1 To UBound(v)
        If Not .Exists(CStr(v(i, 1))) Then _
            .Add Key:=CStr(v(i, 1)), Item:=v(i, 1)
    Next i
    Debug.Print "Case Sensitive Uniques", .Count
End With

End Sub