分组并汇总R中的日期差

时间:2019-03-17 23:10:11

标签: r group-by date-difference

我正在尝试使用group_by,然后使用日期差计算进行汇总。我不确定它是否是运行时错误或我在做什么。有时,当我运行代码时,我得到的输出以天为单位,而其他时间则以秒为单位。我不确定是什么导致了这种变化。我没有更改数据集或代码。我正在使用的数据集非常庞大(2,304,433行和40列)。两次时间,输出值(数字)都相同,但只有名称更改(天到秒)。我希望在几天内看到输出。 这是我正在使用的代码:

data %>% 
group_by(PRODUCT,PERSON_ID) %>% 
summarise(Freq = n(),
          Revenue = max(TOTAL_AMT + 0.000001/QUANTITY), 
          No_Days = (max(ORDER_DT) - min(ORDER_DT) + 1)/n())

这是output

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

使用difftime()您可能需要指定单位。

set.seed(314)
data <- data.frame(PRODUCT = sample(1:10, size = 10000, replace = TRUE),
                   PERSON_ID = sample(1:10, size = 10000, replace = TRUE),
                   ORDER_DT = as.POSIXct(as.Date('2019/01/01') + sample(-300:+300, size = 10000, replace = TRUE)))


require(dplyr)

data %>% 
  group_by(PRODUCT,PERSON_ID) %>% 
  summarise(Freq = n(),
            start = min(ORDER_DT), 
            end = max(ORDER_DT)) %>%
  mutate(No_Days = (as.double(difftime(end, start, units = "days"), units = "days")+1)/Freq)

给予:

PRODUCT PERSON_ID  Freq start               end                 No_Days
<int>     <int> <int> <dttm>              <dttm>                <dbl>
1       1         1   109 2018-03-21 01:00:00 2019-10-27 02:00:00    5.38
2       1         2   117 2018-03-23 01:00:00 2019-10-26 02:00:00    4.98
3       1         3   106 2018-03-19 01:00:00 2019-10-28 01:00:00    5.56
4       1         4   109 2018-03-07 01:00:00 2019-10-26 02:00:00    5.50
5       1         5    95 2018-03-07 01:00:00 2019-10-16 02:00:00    6.2 
6       1         6    79 2018-03-09 01:00:00 2019-10-04 02:00:00    7.28
7       1         7    83 2018-03-09 01:00:00 2019-10-28 01:00:00    7.22
8       1         8   114 2018-03-09 01:00:00 2019-10-16 02:00:00    5.15
9       1         9   100 2018-03-09 01:00:00 2019-10-13 02:00:00    5.84
10      1        10    91 2018-03-11 01:00:00 2019-10-26 02:00:00    6.54
# ... with 90 more rows        

答案 1 :(得分:-1)

为什么值由 n()分配?

简单的app.get("/api/posts", getPosts);应该可以使用,但是如果不能使用,请更加具体,并向我提供更多信息。

在使用日期时间值时,最好了解 lubridate