【问题标题】:Randomness in dplyrdplyr 中的随机性
【发布时间】:2014-08-28 10:39:00
【问题描述】:

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
..          ... ..   ...

【问题讨论】:

  • 是的,问题是代码没有改变,结果却改变了。这是我的担心。

标签: r dplyr


【解决方案1】:

嗯,你打字的时候也会有类似的奇怪行为

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 的警告会很好。

【讨论】:

  • 你能提交一个 dplyr 问题吗?
  • 现在是 dplyr 问题。
  • n_distinct("mpg") 现在被禁止并给出以下消息:Input to n_distinct() must be a single variable name from the data set
猜你喜欢
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多