Автоматизировать форматирование даты - PullRequest
2 голосов
/ 17 января 2020

Данные содержат столбец «диапазон дат», который содержит 2 месяца, т. Е. 31 октября 2009 года - 30 ноября 2009 года (ноябрь) и De c 1,2019 - ноябрь 2019 года * 31 декабря 2019 года. Необходимо разделить их в разных столбцах в столбцах «Период после публикации» (декабрь) и «Период до периода» (октябрь) относительно столбца «Доход». Я хочу автоматизировать этот процесс, когда я загружаю файл, сравнивая любые 2 месяца. Более ранний месяц под «Периодом до» и позже под «Периодом после». Прикреплен пример превосходного снимка экрана с необработанными данными и обработанными данными.

x<-data.frame("A"=c("book","mobile","tablet","desktop"),
              "B"=c("new york","chicago","london","paris"),
              "Date.Range"=c("Oct 31,2019-Nov 30,2019","Oct 31,2019-Nov 30,2019","Dec 1,2019-Dec 31, 2019","Dec 1,2019-Dec 31, 2019"),
              "Revenue"=c(542,837,1234,846))
dput(x)


structure(list(A = structure(c(1L, 3L, 4L, 2L), .Label = c("book", 
"desktop", "mobile", "tablet"), class = "factor"), B = structure(c(3L, 
1L, 2L, 4L), .Label = c("chicago", "london", "new york", "paris"
), class = "factor"), Date.Range = structure(c(2L, 2L, 1L, 1L
), .Label = c("Dec 1,2019-Dec 31, 2019", "Oct 31,2019-Nov 30,2019"
), class = "factor"), Revenue = c(542, 837, 1234, 846)), class = "data.frame", row.names = c(NA, 
-4L))

Необработанные данные.
Raw Data

Обработанные данные.
Processed Data

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Использование функции базового R reshape:

df = reshape(data = x,idvar = c("A","B"),direction = "wide",timevar  = "DateRange")
colnames(df)=c("A","B","pre","post")
1 голос
/ 17 января 2020

Мы можем извлечь одну дату из Date.Range, arrange данных в соответствии с ней, создать новый столбец period и получить данные в широком формате.

library(dplyr)

x %>%
  mutate(date = lubridate::mdy(sub("-.*", "", Date.Range))) %>%
  arrange(date) %>%
  mutate(period = rep(c("pre", "post"), each = 2)) %>%
  tidyr::pivot_wider(names_from = period, values_from = Revenue, 
                     values_fill = list(Revenue = 0)) %>%
  select(-date)


# A tibble: 4 x 5
#   A       B        Date.Range                pre  post
#  <fct>   <fct>    <fct>                   <dbl> <dbl>
#1 book    new york Oct 31,2019-Nov 30,2019   542     0
#2 mobile  chicago  Oct 31,2019-Nov 30,2019   837     0
#3 tablet  london   Dec 1,2019-Dec 31, 2019     0  1234
#4 desktop paris    Dec 1,2019-Dec 31, 2019     0   846
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...