2014-08-28 6 views
2

오늘 dplyr에 이상한 일이 생겼습니다. 나는 '데이터'라는 4 개의 열이있는 행렬을 가지고있다. 소셜 네트워크입니다 : V1 & V2는 가장자리로 연결된 노드이고 V3 & V4는 일부 레이블입니다. 이 데이터 세트에 대한 요약 통계에 관심이 있었기 때문에 dplyr을 사용했습니다. 그러나 이상한 일이 일어났습니다. 그것은 어떤 종류의 무작위 결과를 제공합니다 ... 나는 그루핑 (groupping), 데이터 정렬 및 요약에있어서 무작위성에 대한 근거를 보지 못합니다. 첨부 된 예제에서 어떤 일이 일어날 수 있었는지 말해 줄 수 있습니까?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

답변

4

글쎄, 당신은 당신이

summarise(mtcars, n_distinct("mpg")) 

이 Iterated을 입력 비슷한 이상한 행동을 할 수는 반환 된 값을 실행 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

+0

지금은 dplyr 문제입니다. –

+1

'n_distinct ("mpg")'는 이제 금지되어 있으며,'Input to n_distinct()는 데이터 세트의 단일 변수 이름이어야합니다. ' –