[英]R Why dplyr counts unique values (n_distinct) by groups faster than data.table (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.