2014-08-28 118 views
2

今天發生了dplyr的奇怪事情。我有'數據',一個有4列的矩陣。這是一個社交網絡:V2是由邊緣連接的節點,並且V3是一些標籤。我對這個數據集的統計數據感興趣,所以我使用了dplyr。然而,發生了一件奇怪的事情 - 它給了我一些隨機的結果......我沒有看到在分組,整理和總結數據方面的隨機性。你能告訴我在附加的例子中會發生什麼?dplyr的隨機性

謝謝!

library(dplyr) 
library(magrittr) 

> head(data) 
    V1  V2  V3    V4 
[1,] "B1003" "B1051" "130000037751" "B" 
[2,] "B1009" "B1054" "130000037751" "B" 
[3,] "B1009" "B1033" "130000037751" "B" 
[4,] "B1012" "B1036" "130000037751" "B" 
[5,] "B1012" "B1066" "130000037751" "B" 
[6,] "B1012" "6IIIBM" "130000037751" "B" 

> data %>% 
+ as.data.frame %>% 
+ group_by("V3", "V4") %>% 
+ summarise(count=n_distinct("V1")) %>% 
+ arrange(., desc(count)) %>% 
+ print 
Source: local data frame [293 x 3] 
Groups: V3 

      V3 V4 count 
1 130000034371 A 179 
2 130000014127 D 122 
3 130000018500 A 112 
4 130000028544 A 112 
5 130000034057 E 108 
6 130000061048 D 103 
7 130000061048 A 100 
8 130000042055 A 99 
9 130000001997 D 98 
10 130000042055 B 94 

...

> data %>% 
+ as.data.frame %>% 
+ group_by("V3", "V4") %>% 
+ summarise(count=n_distinct("V1")) %>% 
+ arrange(., desc(count)) %>% 
+ print 
Source: local data frame [293 x 3] 
Groups: V3 

      V3 V4 count 
1 130000035777 B 129 
2 130000064171 C 118 
3 130000001997 D 110 
4 130000034057 E 109 
5 130000012718 G 95 
6 130000017725 B 92 
7 130000047614 B 89 
8 130000005741 C 86 
9 130000034037 C 78 
10 130000028189 A 77 

...

> data %>% 
+ as.data.frame %>% 
+ group_by("V3", "V4") %>% 
+ summarise(count=n_distinct("V1")) %>% 
+ arrange(., desc(count)) %>% 
+ print 
Source: local data frame [293 x 3] 
Groups: V3 

      V3 V4 count 
1 130000034371 A 162 
2 130000036173 A 134 
3 130000060230 E 114 
4 130000060230 B 105 
5 130000061592 C 99 
6 130000001997 D 98 
7 130000057531 B 95 
8 130000028447 F 85 
9 130000064171 C 85 
10 130000057531 A 83 
..   ... .. ... 
+2

是的,問題在於代碼不會改變,結果是。這是我的擔憂。 – Tim 2014-08-28 10:45:53

回答

4

好,你可以有,當你鍵入

summarise(mtcars, n_distinct("mpg")) 

迭代類似的奇怪的行爲運行的返回值在16和24之間。

但這不符合dplyr文檔中的示例。這些函數的參數應該是向量,而不是字符串。

正確的變種

summarise(mtcars, n_distinct(mpg)) 

總是返回正確的值 「25」。

所以,儘量

data %>% 
+ as.data.frame %>% 
+ group_by(V3, V4) %>% 
+ summarise(count=n_distinct(V1)) %>% 
+ arrange(., desc(count)) %>% 
+ print 

與您的數據 - 這可能會返回正確的價值觀?

但無論如何,當使用字符時,dplyr的警告會很好。

+0

你能否提出一個dplyr問題? – hadley 2014-08-28 16:55:05

+0

這是一個dplyr問題。 – 2014-08-30 07:51:34

+1

'n_distinct(「mpg」)'現在被禁止並給出這樣的信息:'n_distinct()的輸入必須是來自數據集' – 2014-09-11 08:32:57