2015-02-01 2 views
3

magrittr 파이프 운영자 시작하기 단일 흐름에서 두 개의 데이터 프레임을 만들 수 있는지 궁금했습니다. 예를 들어, 플로팅을 위해 집계되지 않은 데이터 프레임을 생성하고 주문 요소에 집계 된 데이터 프레임을 생성하는 것이 도움이됩니다 (aggregate ordering example).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_countagg는 동일한 플로우에서 발생 될 수 : 여기

는 그 문제를 예시 오히려 인위적인 예입니까?

필자는 분명히 작동하지 않는 % T> %를 사용하여 다음을 시도했습니다.

vore_count <- 
    na.exclude(msleep) %>% 
    group_by(vore, order) %>% 
    summarise(count = n()) %>% 
    ungroup() %>% 
     agg <- spread(vore, count) 
+0

'magrittr' 외에 어떤 패키지를 사용하고 있습니까? '확산'은 UDF입니까, 아니면 다른 패키지입니까? – nrussell

+1

@Minnow'? spread'는'tidyr'에서입니다 – akrun

+1

'msleep'은 어디에 있습니까? –

답변

5

그런 다음 첫 번째 data.frame의 평가 후 agg을 연결 파이프에 list()를 사용할 수 있습니다. 여기서는 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" 
6

사이드 할당 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) 
3

유혹을 이해할 수 있지만 IMO는 하나의 워크 플로/파이프 라인에서 하나만 지정해야합니다. 더 깔끔하고 읽기 쉽고 연습도 더 좋습니다. 각 파이프 라인은 이상적으로 오직 하나의 목적만을 가져야합니다. 하나의 입력, 하나의 출력.

+0

조언을 잘 받았습니다. 누군가가 그것에 대해 추천한다면 나는 궁금했다. 좋은 생각이라면이 기능을 구현했을 것입니다. – Minnow

+3

@ 몇 번이나 요청했음을 알았지 만, 나는 이것을 기쁘게 생각하지 않는다. 환경에 대한 참조가 필요하지만'% T> %'와'assign'의 조합을 사용하는 것도 가능합니다. 나중에 환경에 쉽게 접근 할 수있게 할 생각입니다. @AK_ IMO 좋은 연습을 인도하는 데 종종 더 좋은 대답입니다 ..하지만 맞았습니다. – Stefan

+0

물론 ....하지만 여기에있는 커스텀은 덧글을 달아서하는 것입니다. –