1

我不完全确定这是一个错误还是我真的做错了什么。但我会在这里问这个问题,然后从那里开始。

假设我们有一个调用次数的虚拟数据集:

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创建数据框时,它似乎删除了 where 行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_dateof "2019-02-18"。我认为这与调用日期与函数start_val中指定的日期相同这一事实有关。thicken

如果有人知道如何使增厚以包含恰好与 中的开始日期参数相同的任何日期thicken,我将不胜感激。

4

1 回答 1

2

start_val论据thicken是:

默认情况下,间隔的第一个实例低于输入日期时间变量的最小值,所有时间单位都为默认值。

该函数假设所有其他值都严格大于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
于 2020-04-16T18:45:14.390 回答