开始使用magrittr管道运算符,如果可以在单个流程中创建两个数据框,那就很奇怪了.例如,生成用于绘图的非聚合数据框和用于订购因子的聚合数据框(聚合排序示例)将是有帮助的.
这是一个相当人为的例子,说明了这个问题:
library(dplyr)
library(tidyr)
library(magrittr)
library(ggplot2) # msleep
vore_count <-
na.exclude(msleep) %>%
group_by(vore, order) %>%
summarise(count = n()) %>%
ungroup()
agg <- vore_count %>%
spread(vore, count)
Run Code Online (Sandbox Code Playgroud)
既可以vore_count 与 agg在同一个流程中产生的?
我尝试了以下(以及使用%T>%),这显然不起作用.
vore_count <-
na.exclude(msleep) %>%
group_by(vore, order) %>%
summarise(count = n()) %>%
ungroup() %>%
agg <- spread(vore, count)
Run Code Online (Sandbox Code Playgroud)
侧面分配更容易pipeR.
library(pipeR)
library(dplyr)
library(ggplot2)
library(tidyr)
na.exclude(msleep) %>>%
group_by(vore, order) %>>%
summarise(count = n()) %>>%
ungroup() %>>%
(~ vore_count) %>>%
spread(vore, count)%>>%
(~ agg)
Run Code Online (Sandbox Code Playgroud)
您可以list()在管道中使用,然后agg在评估第一个data.frame 之后连接.我在这里使用mtcars.结果是两个数据帧的命名列表.
library(dplyr)
library(tidyr)
na.exclude(mtcars) %>%
group_by(cyl, disp) %>%
summarise(count = n()) %>%
ungroup %>%
list(cyl_count = .) %>%
c(list(agg = spread(.$cyl_count, cyl, count)))
Run Code Online (Sandbox Code Playgroud)
如果要将这些分配给全局环境,可以将以下行添加到管道的末尾
... %>%
list2env(globalenv())
ls(pattern = "agg|cyl_count")
# [1] "agg" "cyl_count"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
280 次 |
| 最近记录: |