簡體   English   中英

不同的data.table r結果有或沒有引用/如何使用uniqueN計算唯一值

[英]Different data.table r results with or without quotations / How to count unique values with uniqueN

我正在嘗試選擇值為7015061009422的所有聲明(ICN)。我使用以下代碼:

  dt[ICN==7015061009422]

然后我回來了

> dt[ICN==7015061009422]
    UniversalID           ICN
 1:           2 7015061009422
 2:           3 7015061009417
 3:           2 7015061009411
 4:           2 7015061009428
 5:           2 7015061009437
 6:           4 7015061009417
 7:           5 7015061009411
 8:           6 7015061009417
 9:           6 7015061009422
10:           7 7015061009422

我終於想通了如果我在值周圍加上引號,我想要發生什么,即選擇所有實際上ICN數等於7015061009422的行,這就是我得到的:

    > dt[ICN=="7015061009422"]
   UniversalID           ICN
1:           2 7015061009422
2:           6 7015061009422
3:           7 7015061009422

為什么在我的數據值周圍使用引號會產生如此大的差異?

樣本數據集:

    ICN<-c(7015061009422,7015061009417,7015061009411,7015061009428,7015061009437,7,7015061009417,7015061009411,7015061009417,7015061009422,7015061009422,1)
  UniversalID<-c(2,3,2,2,2,1,4,5,6,6,7,8)
  dt<-cbind(UniversalID,ICN)
  dt<-as.data.table(dt)
  dt[ICN==7015061009422]
  dt[ICN=="7015061009422"]

我希望這也可以幫助我弄清楚為什么我的獨特計數不起作用:

> > dt[,uniqueN(ICN)] 
[1] 3

很明顯,有三個以上不同的ICN值,為什么會發生這種情況呢?

當您使用==比較非常大的數字時,R不檢查確切的相等性。 相反,它檢查數字是否彼此“接近”。 如果是,則返回TRUE。 R對浮點數做了同樣的事情。

當您在數字周圍加上引號時,您將隱式地將其轉換為字符串。 因此,調用==將導致R進行字符串比較,並得到您想要的答案。

而不是a == b ,使用abs(ab) < 0.001 ,或其他任意小數。

編輯:你用這些數字做任何實際算術嗎? 如果沒有,您應該將它們轉換為因子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM