Если дата находится между двумя датами, найдите значение, используя общую ссылку - PullRequest
0 голосов
/ 08 июня 2018

Я новичок в R и с трудом справляюсь с чем-то.У меня есть фрейм данных, содержащий, помимо прочего, даты и название места размещения рекламы.

У меня есть другая таблица, содержащая дату начала, дату окончания, название места размещения объявления и ставку.

Мне в основном нужно сослаться на ключ тарифа и применить vlookup (left_join) к моему фрейму данных на основе даты и названия места размещения, учитывая различные ставки, которые могут возникнуть для диапазонов различий в моей справочной таблице.

До сих пор я довольно широко использовал dplyr для перемещения, но это самое сложное, с чем я сталкивался до сих пор.Первоначально предполагалось, что мне может понадобиться сделать каждый возможный диапазон дат своей собственной таблицей и применить left_join к df, но я не уверен.

Пример:

Справочная таблица

placement             start        end          rate 
NewYorkTimes_iPhone   2018-06-01   2018-06-25   5 
NewYorkTimes_iPhone   2018-06-26   2018-06-30   7 

Желаемый результат

placement           date        rate 
NewYorkTimes_iPhone 2018-06-15  5 

В основном в кадре данных столбец скорости будет отсутствовать.Мне это нужно, чтобы найти в справочной таблице общее размещение и посмотреть, находится ли дата между диапазонами в ключе

Любая помощь приветствуется!Это мой первый проект, и я узнал все онлайн через DataCamp.

Спасибо !!

Тайлер

1 Ответ

0 голосов
/ 08 июня 2018
> ref_tbl <- 
+     tibble(
+         placement = c("NewYorkTimes_iPhone","NewYorkTimes_iPhone"), 
+         start = c("2018-06-01","2018-06-26"),
+         end = c("2018-06-25","2018-06-30"),
+         rate = c(5,7)
+     ) %>% 
+     mutate_at(vars(start, end),as.Date)
> des_tbl <- 
+     tibble(
+         placement = "NewYorkTimes_iPhone",
+         date = "2018-06-15",
+         rate = 5
+     ) %>% 
+     mutate(date = as.Date(date))
> ref_tbl
# A tibble: 2 x 4
  placement           start      end         rate
  <chr>               <date>     <date>     <dbl>
1 NewYorkTimes_iPhone 2018-06-01 2018-06-25     5
2 NewYorkTimes_iPhone 2018-06-26 2018-06-30     7
> des_tbl
# A tibble: 1 x 3
  placement           date        rate
  <chr>               <date>     <dbl>
1 NewYorkTimes_iPhone 2018-06-15     5
> 
> ref_tbl %>% 
+     left_join(des_tbl, by = c("placement","rate")) %>% 
+     mutate(
+         ifelse(date %within% interval(start,end),1,0)
+     )
# A tibble: 2 x 6
  placement           start      end         rate date       `ifelse(date %wit~
  <chr>               <date>     <date>     <dbl> <date>                  <dbl>
1 NewYorkTimes_iPhone 2018-06-01 2018-06-25     5 2018-06-15                  1
2 NewYorkTimes_iPhone 2018-06-26 2018-06-30     7 NA                         NA
> 

Вот некоторые комментарии.

Для левой объединенной таблицы нам нужно получить результаты, где date находится между start и end.Здесь решение %within% и interval из пакета lubridate является решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...