今天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
.. ... .. ...
答案 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的警告会很好。