使用dplyr对数值进行汇总 - 使RStudio崩溃

4

dplyr可以对data.frame执行连续的summarise操作吗?

我的data.frame结构如下:

data_df = tbl_df(data)    
data_df %.%
        group_by(col_1) %.%
        summarise(number_of= length(col_2)) %.%
        summarise(sum_of = sum(col_3)) 

这会导致RStudio遇到一个致命错误-R Session Aborted的消息。

通常情况下,我使用plyr时都不会出现问题,可以包含这些summarise函数。

更新

数据在这里

代码如下:

library(dplyr)

orth <- read.csv('orth0106.csv')
orth_df = tbl_df(orth)


orth_df %.%
    group_by(Hospital) %.%
    summarise(Procs = length(Procedure)) %.%
    summarise(SSIs = sum(SSI))

你能提供一个可重现的例子来复现这个错误吗? - marbel
@martin-bel - 数据和代码现在已包含。 - John
将来请直接在 GitHub 上提交此类错误。我已投票关闭此问题,因为一旦 dplyr 的下一个版本发布(很快就会发布),它将不再适用。 - hadley
这个问题似乎不属于讨论范围,因为它是一个错误报告,而且已经在软件的开发版本中修复了。 - hadley
1个回答

11
我可以在运行RStudio 0.97.551的Windows 7计算机上重现错误。
可能是因为您正在调用summarise并链接到不存在的东西。您可以像我这样使用2个不同的列进行summarise
url <- "https://raw.github.com/johnmarquess/some.data/master/orth0106.csv"

library(dplyr)

orth <- read.csv(url)
orth_df <- tbl_df(orth)


orth_df %.%
    group_by(Hospital) %.%
    summarise(Procs = length(Procedure), SSIs = sum(SSI))

## Source: local data frame [18 x 3]
## 
##    Hospital Procs SSIs
## 1         A   865   80
## 2         B  1069   38
## 3         C   796   24
## 4         D   891   35
## 5         E   997   39
## 6         F   550   30
## 7         G  2598  128
## 8         H   373   27
## 9         I  1079   70
## 10        J   714   30
## 11        K   477   30
## 12        L   227    2
## 13        M   125    6
## 14        N   589   38
## 15        O   292    3
## 16        P   149    9
## 17        Q  1984   52
## 18        R   351   13

无论如何,这似乎是RStudio或dplyr的一个bug。我会向Hadley提出问题,因为他可能在任何情况下都很关心。https://github.com/hadley/dplyr/issues 编辑:这也导致rgui(Windows)和终端在以下情况下崩溃:
R version 3.0.2 (2013-09-25)
Platform: i386-w64-mingw32/i386 (32-bit)

这表示一个与 dplyr 相关的问题,Hadley 和 Romain 需要知道。
为了得到我的第一个观点,我们运行:
orth_df %.%
    group_by(Hospital) %.%
    summarise(Procs = length(Procedure))

Source: local data frame [18 x 2]

   Hospital Procs
1         A   865
2         B  1069
3         C   796
4         D   891
5         E   997
6         F   550
7         G  2598
8         H   373
9         I  1079
10        J   714
11        K   477
12        L   227
13        M   125
14        N   589
15        O   292
16        P   149
17        Q  1984
18        R   351

%.% summarise(SSIs = sum(SSI)) 应该在哪里查找 SSI

所以你认为会发生链式操作,但实际上,据我理解,%.% 不完全像 ggplot2 的工作方式,但类似。在 ggplot2 中,一旦你在初始映射中传递数据,则可以在稍后访问它。这里的 %.% 似乎修改抓取左侧块并对其进行操作,如下所示:

enter image description here

所以你正在获取:

   Hospital Procs
1         A   865
2         B  1069
3         C   796
.
.
.
17        Q  1984
18        R   351

当你使用%.% summarise(SSIs = sum(SSI))时,如果没有可以获得的SSI,那么会出现这种情况。所以,我想到的比喻是串联与并联的圣诞灯%.% = 串联 ggplot() + = 并联。这是一个非程序员的理解,R专家可能会告诉我我很愚蠢,但目前这是你最好的理论。

糟糕!现在我明白了。在新创建的 df 中不存在。 - John
你可能没有明白链式编程的重点。请查看我最新编辑的带有图片的内容。 - Tyler Rinker
1
感谢您提交问题。但是,我相信它已经在开发版本中修复了。 - Romain Francois
@Romain,你是正确的。正如我在报告中所述,它现在会抛出一个错误。 - Tyler Rinker
谢谢您的跟进。 - Romain Francois
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接