Как связать два разных фрейма данных для расчетов - PullRequest
0 голосов
/ 10 мая 2018

Я знаю, как работать и вычислять математику / статистику с одним фреймом данных.Но что происходит, когда мне приходится иметь дело с двумя?Например:

> df1
   supervisor salesperson
1 Supervisor1        Matt
2 Supervisor2      Amelia
3 Supervisor2     Philip

> df2
  month   channel Matt Amelia Philip
1   Jan  Internet   10     50     20
2   Jan Cellphone   20     60     30
3   Feb  Internet   40     40     30
4   Feb Cellphone   30    120     40

Как можно эффективно и обобщенно рассчитать продажи по супервизору, сгруппированному по каналам?Есть ли какая-либо методология или критерии, когда вам нужно связать два или более фреймов данных для вычисления необходимых вам данных?

PS: число продаж, совершенных каждым продавцом.

1 Ответ

0 голосов
/ 10 мая 2018

Вот идея преобразования в long и слияния с использованием tidyverse,

library(tidyverse)

df2 %>% 
 gather(salesperson, val, -c(1:2)) %>% 
 left_join(., df1, by = 'salesperson') %>% 
 spread(salesperson, val, fill = 0) %>% 
 group_by(channel, supervisor) %>% 
 summarise_at(vars(names(.)[4:6]), funs(sum))

что дает,

# A tibble: 4 x 5
# Groups:   channel [?]
  channel   supervisor  Amelia  Matt Philip
  <fct>     <fct>        <dbl> <dbl>  <dbl>
1 Cellphone Supervisor1     0.   50.     0.
2 Cellphone Supervisor2   180.    0.    70.
3 Internet  Supervisor1     0.   50.     0.
4 Internet  Supervisor2    90.    0.    50.

ПРИМЕЧАНИЕ: Вы также можете добавить month в group_by

...