首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Group by with summarise in date difference in R

Group by with summarise in date difference in R
EN

Stack Overflow用户
提问于 2019-03-18 07:10:11
回答 2查看 60关注 0票数 0

我正在尝试使用group_by,然后使用日期差异计算进行总结。我不确定这是运行时错误还是我所做的事情中的错误。有时,当我运行代码时,我会得到以天为单位的输出,而有时则以秒为单位。我不确定是什么导致了这种变化。我不会更改数据集或代码。我使用的数据集非常大(2,304,433行和40列)。这两个时间的输出值(位数)是相同的,只是名称发生了变化(天数变为秒)。我想在几天内看到输出。这是我使用的代码:

代码语言:javascript
复制
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

有人能在这方面帮我一下吗?

EN

回答 2

Stack Overflow用户

发布于 2019-03-18 16:20:40

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

代码语言:javascript
复制
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)

提供:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-03-18 07:33:30

为什么这个值除以n()

简单的as.integer(max(ORDER_DT) - min(ORDER_DT))应该可以工作,但如果它不是,那么请更具体,并更新我与更多的信息。

此外,在使用DateTime值时,最好了解lubridate

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55212854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档