2016-07-20 2 views
-1

Недавно я наткнулся uppon проблемы, когда мне нужно CompAir попарных различий типов:«внешняя» операция с использованием dplyr/tidyr/purrr?

sometypes <- data.frame(id = rep(1:3, 2), 
         type = paste0("t", 1:6), 
         value1 = rnorm(6), 
         value2 = rnorm(6)) 

Здесь я хотел бы, чтобы вычислить разницу между значению1 и значение2 в зависимости от их типа. Я понял, использовать inner_join:

#library(dplyr) 
inner_join(select(sometypes, - value2), 
      select(sometypes, - value1), by = c("id")) %>% 
    mutate(difference = value1 - value2) 

Поскольку I фактический пример у меня есть цепь команд до и после этого, я хотел бы, чтобы эффективно использовать оператор %>% в:

# ... imagine some operators before 
sometypes %>% 
    (function(ds) inner_join(select(ds, - value2), 
          select(ds, - value1), 
          by = c("id"))) %>% 
    mutate(difference = value1 - value2) 
# ... imagine many operators afterwards 

.. ., и я хотел бы знать, если есть более краткий способ описать это, и есть ли другие consice решить эту проблему в dplyr (возможно, с помощью map2_df из purrr, но как?)

+0

любая причина для нисходящего потока? – Drey

ответ

0

I г УЭСС «правильный» способ заключается в использовании брекетов . и фигурные:

sometypes %>% 
    { inner_join(select(., - value2), 
      select(., - value1), 
      by = c("id")) } %>% 
    mutate(difference = value1 - value2) 

Вины Подробной информации о том, как работает оператор %>%. Подробнее об этом можно узнать в документации magrittr. В частности, фигурные скобки останавливают левую сторону от использования в качестве первого аргумента функции, и вы можете напрямую ссылаться на левую сторону с помощью ..

+0

Спасибо, это звучит разумно, но меняет только синтаксис. Меня интересует, есть ли другая, более часовая оценка. – Drey

+0

Ах, извините, я тогда неправильно понял вас. – Axeman

Смежные вопросы