[英]Is is possible to create two data frames in a single work flow with magrittr?
開始使用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)
vore_count
和 agg
可以在同一個流程中生成嗎?
我嘗試了以下(以及使用%T>%),這顯然不起作用。
vore_count <-
na.exclude(msleep) %>%
group_by(vore, order) %>%
summarise(count = n()) %>%
ungroup() %>%
agg <- spread(vore, count)
使用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)
您可以在管道中使用list()
,然后在評估第一個data.frame之后連接agg
。 在這里我只使用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)))
如果要將這些分配給全局環境,可以將以下行添加到管道的末尾
... %>%
list2env(globalenv())
ls(pattern = "agg|cyl_count")
# [1] "agg" "cyl_count"
雖然我能理解這種誘惑,但IMO只應從一個工作流/管道中進行一項任務。 它更清潔,更易於閱讀和更好的練習。 理想情況下,每個管道只應有一個目的。 一個輸入,一個輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.