使用 padr 加厚日期范围,其中起始值与数据框中的日期之一相同
Thicken date range using padr where starting value is the same as one of the dates in data frame
我不确定这是一个错误还是我真的做错了什么。但我会在这里问这个问题,然后从那里开始。
假设我们有一个呼叫次数的虚拟数据集:
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
它出于某种原因忽略了 "2019-02-18"
的 Call_date
。我认为这与调用日期与 thicken
函数中指定的 start_val
日期相同这一事实有关。
如果有人知道如何加厚以包含恰好与 thicken
中的开始日期参数相同的任何日期,我将不胜感激。
thicken
的 start_val
参数是:
By default the first instance of interval that is lower than the lowest value of the input datetime variable, with all time units on default value.
该函数假设所有其他值 严格 大于 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
我不确定这是一个错误还是我真的做错了什么。但我会在这里问这个问题,然后从那里开始。
假设我们有一个呼叫次数的虚拟数据集:
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
它出于某种原因忽略了 "2019-02-18"
的 Call_date
。我认为这与调用日期与 thicken
函数中指定的 start_val
日期相同这一事实有关。
如果有人知道如何加厚以包含恰好与 thicken
中的开始日期参数相同的任何日期,我将不胜感激。
thicken
的 start_val
参数是:
By default the first instance of interval that is lower than the lowest value of the input datetime variable, with all time units on default value.
该函数假设所有其他值 严格 大于 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