可以dplyr
对summarise
执行链接data.frame
操作吗?
我的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遇到fatal error - R Session Aborted
消息
通常使用plyr
我会毫无问题地包含这些summarise
函数。
更新
数据为here.
代码是:
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))
答案 0 :(得分:10)
我可以在运行RStudio 0.97.551的Windows 7机器上重现错误
这可能是因为你正在调用summarise
并将其链接到那些不存在的东西上。您可以summarise
使用2个不同的列,就像我在这里所做的那样。
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
错误。我会向哈德利提出一个问题,因为他可能会关心这两种方式。 https://github.com/hadley/dplyr/issues
编辑这(你的第一次通话)也会导致rgui(windows)和终端崩溃:
R version 3.0.2 (2013-09-25)
Platform: i386-w64-mingw32/i386 (32-bit)
这表示Hadley和Romain想要了解dplyr
问题。
为了得到我的第一点,我们运行:
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
中,在初始映射中传递数据后,您可以稍后访问它。这里%。%似乎修改抓住左边的块并按照这样操作:
所以你抓住了:
Hospital Procs
1 A 865
2 B 1069
3 C 796
.
.
.
17 Q 1984
18 R 351
当您使用%.% summarise(SSIs = sum(SSI))
并且没有SSI
时。因此,我想到的类比是serial vs. parallel wiring Christmas lights。 %.% = serial
ggplot() + = parallel
。这是一个非程序员对事物的理解,而R大师可能会告诉我,我是愚蠢的,但是现在这是你得到的最好的理论。