繁体   English   中英

R:如何将日期向量转换为这些日期之间的间隔?

[英]R: How can I convert a vector of dates to the interval between these dates?

我有一系列日期(它们是Dates类),它们代表某人做某事的日期:

    mytimes = as.Date(c("2014-08-15", "2014-08-29", "2014-08-01", "2014-09-19", "2014-10-31"))

我该如何计算这些日期之间的时间,然后又计算这些日期之间的中值时间?

例如,我可以计算最早日期之后的几天:

    > sort(mytimes) - min(mytimes)
    Time differences in days
    [1]  0 14 28 49 91

但我想获取间隔:0 14 14 21 42

我有一个data.frame,其中有多个用户/人员,每次他们登录系统时都有一个条目。 我想总结一下两次登录之间的间隔。 我希望有一些不错的方法...我可以通过计算总时间并除以我的条目数来计算平均时间,但是我也想要实际的分布,中位数等。 理想情况下,我可以与dplyr一起使用以汇总按用户分组的数据。

编辑:我刚刚发现滞后

因此,我可以执行以下操作:

   dataset <- data.frame(ID = c(rep(1, 5), rep(2, 5)), times = rep(mytimes, 2))

    dataset %>% 
     arrange(ID, times) %>%
     group_by(ID) %>%
     mutate(diff_shift = times - lag(times))


# A tibble: 10 x 3
# Groups:   ID [2]
      ID times      diff_shift
   <dbl> <date>     <time>    
 1  1.00 2014-08-01 <NA>      
 2  1.00 2014-08-15 14        
 3  1.00 2014-08-29 14        
 4  1.00 2014-09-19 21        
 5  1.00 2014-10-31 42        
 6  2.00 2014-08-01 <NA>      
 7  2.00 2014-08-15 14        
 8  2.00 2014-08-29 14        
 9  2.00 2014-09-19 21        
10  2.00 2014-10-31 42   

基本的R答案只是

> diff(sort(mytimes))
Time differences in days
[1] 14 14 21 42
> median(diff(sort(mytimes)))
Time difference of 17.5 days

您可能要在开始时添加一个0,具体取决于您的操作。

使用dplyr您可以根据示例数据按以下方式进行操作。

但是您需要知道,根据data.frame的外观,您需要添加一个userid或更多变量的group_by

library(dplyr)
df <- data_frame(mytimes = as.Date(c("2014-08-15", "2014-08-29", "2014-08-01", "2014-09-19", "2014-10-31")))
df %>% 
  # group_by(???)
  arrange(mytimes) %>% 
  mutate(time_diff = mytimes - lag(mytimes))

  mytimes    time_diff
  <date>     <time>   
1 2014-08-01 NA       
2 2014-08-15 14       
3 2014-08-29 14       
4 2014-09-19 21       
5 2014-10-31 42     

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM