Плавление данных по диапазону дат - PullRequest
0 голосов
/ 31 января 2019

Я сталкиваюсь с проблемой данных RStudio относительно правильного плавления данных.В настоящее время он имеет следующую форму:

Кампания, идентификатор, дата начала, дата окончания, общее количество дней, общее количество расходов, общее количество показов, общее количество конверсий

Я хочу, чтобы мои данные просматривалисьнапример:

Кампания, ID, Дата, Расходы, Показы, Конверсии

Каждая «дата» должна содержать определенный день, когда кампания проводилась, а расходы, показы и конверсии должны равняться Всего.Потратить / Общее количество дней, Общее количество показов / Общее количество дней и Общее количество конверсий / Общее количество дней соответственно.

Я работаю в RStudio, поэтому необходимо решение на языке R.У кого-нибудь есть опыт манипулирования такими данными?

1 Ответ

0 голосов
/ 31 января 2019

Это работает, но не особенно эффективно.Если ваши данные содержат миллионы строк или более, мне больше повезло с использованием SQL и объединений неравенства.

library(tidyverse)

#create some bogus data
data <- data.frame(ID = 1:10,
                   StartDate = sample(seq.Date(as.Date("2018-01-01"), as.Date("2018-12-31"), "day"), 10),
                   Total = runif(10)) %>% 
  mutate(EndDate = StartDate + floor(runif(10) * 14))


#generate all dates between the min and max in the dataset
AllDates = data.frame(Date = seq.Date(min(data$StartDate), max(data$EndDate), "day"),
                      Dummy = TRUE)

#join via a dummy variable to add rows for all dates to every ID
data %>% 
  mutate(Dummy = TRUE) %>% 
  inner_join(AllDates, by = c("Dummy" = "Dummy")) %>% 
  #filter to just the dates between the start and end
  filter(Date >= StartDate, Date <= EndDate) %>% 
  #divide the total by the number of days
  group_by(ID) %>% 
  mutate(TotalPerDay = Total / n()) %>% 
  select(ID, Date, TotalPerDay)

# A tibble: 91 x 3
# Groups:   ID [10]
        ID    Date       TotalPerDay
      <int>   <date>      <dbl>
  1     1 2018-06-21     0.00863
  2     1 2018-06-22     0.00863
  3     1 2018-06-23     0.00863
  4     1 2018-06-24     0.00863
  5     1 2018-06-25     0.00863
  6     1 2018-06-26     0.00863
  7     1 2018-06-27     0.00863
  8     1 2018-06-28     0.00863
  9     1 2018-06-29     0.00863
  10     1 2018-06-30     0.00863
  # ... with 81 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...