dplyr中的随机性

时间:2014-08-28 10:39:00

标签: r dplyr

今天dplyr发生了奇怪的事情。我有数据',一个有4列的矩阵。它是一个社交网络:V1& V2是由边缘连接的节点和V3& V4是一些标签。我对这个数据集的摘要统计感兴趣,所以我使用了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
..          ... ..   ...

1 个答案:

答案 0 :(得分: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的警告会很好。