Увеличьте диапазон дат с помощью padr, где начальное значение совпадает с одной из дат во фрейме данных
Я не совсем уверен, ошибка ли это или я что-то делаю неправильно. Но я задам вопрос здесь и перейду к этому.
Предположим, у нас есть фиктивный набор данных о количестве звонков:
df_calls = data.frame(Call_date= c("2019-02-18",
"2019-02-19",
"2019-02-20",
"2019-02-22",
"2019-02-25",
"2019-02-26",
"2019-03-01",
"2019-03-04"),
Calls = c(12,4,2,8,1,3,1,8))
Теперь я хочу расширить этот набор данных и посмотреть, сколько звонков было в неделю, начиная с"2019-02-18"
.
Таким образом, мы имеем:
starting_day= as.Date("2019-02-18")
Теперь я ожидал бы на неделе, начиная с дня "2019-02-18"
до дня "2019-02-24"
там должен быть 12+4+2+8 = 26
звонки.
Давайте посмотрим...
Используя padr
библиотека, я использую функцию thicken
:
library(padr)
df_calls_weekly = df_calls %>%
mutate(Call_date = as.Date(Call_date)) %>%
thicken("week",colname = "Date_Week" ,start_val = starting_day) %>%
group_by(Date_Week) %>%
summarise(Num_calls = sum(Calls)) %>%
ungroup()
Смотря на df_calls_weekly
у нас есть следующий вывод:
# A tibble: 3 x 2
Date_Week Num_calls
<date> <dbl>
1 2019-02-18 14
2 2019-02-25 5
3 2019-03-04 8
Кажется, мы получаем другой ответ, то есть на неделю, начиная с "2019-02-18"
мы получаем 14 звонков. Не 26?
Изучив, я вижу, что, глядя на то, как thicken
создает фрейм данных, кажется, что он отбрасывает строку, где Call_date == "2019-02-18"
. Что вы можете явно увидеть здесь:
df_calls_weekly = df_calls %>%
mutate(Call_date = as.Date(Call_date)) %>%
thicken("week",colname = "Date_Week" ,start_val = starting_day) %>%
filter(Date_Week ==starting_day )
с выходом:
Call_date Calls Date_Week
1 2019-02-19 4 2019-02-18
2 2019-02-20 2 2019-02-18
3 2019-02-22 8 2019-02-18
он по какой-то причине игнорирует Call_date
из "2019-02-18"
. Полагаю, это связано с тем, что дата звонка совпадает сstart_val
дата указана в thicken
функция.
Если кто-нибудь знает, как заставить утолщение включать любые даты, которые совпадают с параметром начальной даты в thicken
, Буду очень признателен.
1 ответ
В start_val
аргумент thicken
является:
По умолчанию первый экземпляр интервала, который ниже самого низкого значения входной переменной datetime, со всеми единицами времени по умолчанию.
Функция, предполагающая, что все остальные значения строго больше, чемstart_val
, но у вас самые низкие значения равны start_val
Таким образом, самые низкие значения игнорируются.
Вот исправление:
df_calls = data.frame(Call_date= c("2019-02-18",
"2019-02-19",
"2019-02-20",
"2019-02-22",
"2019-02-25",
"2019-02-26",
"2019-03-01",
"2019-03-04"),
Calls = c(12,4,2,8,1,3,1,8))
starting_day= as.POSIXct("2019-02-17 23:59:59") # a second before the minimum date
library(tidyverse)
library(padr)
df_calls_weekly = df_calls %>%
mutate(Call_date = as.Date(Call_date)) %>%
thicken("week",colname = "Date_Week", start_val = starting_day) %>%
group_by(Date_Week) %>%
summarise(Num_calls = sum(Calls)) %>%
ungroup() %>%
mutate(Date_Week = Date_Week + 1) # add the missing second back in