Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如何将日期向量转换为这些日期之间的间隔?_R - Fatal编程技术网

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

R:如何将日期向量转换为这些日期之间的间隔?,r,R,我有一系列日期(它们是上课日期),代表某人做某事的日期: 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

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

    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   
dataset%
排列(ID,次数)%>%
分组依据(ID)%>%
变异(差异移位=时间-滞后(时间))
#一个tibble:10x3
#组别:ID[2]
ID时间差移位
1  1.00 2014-08-01       
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       
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   

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

但是您需要知道,根据data.frame的外观,您需要添加一个用户ID或更多变量的
分组

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     
库(dplyr)
df%
#分组依据(??)
安排(mytimes)%%>%
突变(time_diff=mytimes-lag(mytimes))
mytimes时间差
1 2014-08-01北美
2 2014-08-15 14       
3 2014-08-29 14       
4 2014-09-19 21       
5 2014-10-31 42     

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

但是您需要知道,根据data.frame的外观,您需要添加一个用户ID或更多变量的
分组

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     
库(dplyr)
df%
#分组依据(??)
安排(mytimes)%%>%
突变(time_diff=mytimes-lag(mytimes))
mytimes时间差
1 2014-08-01北美
2 2014-08-15 14       
3 2014-08-29 14       
4 2014-09-19 21       
5 2014-10-31 42     

基本答案是

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

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

基本R答案仅为

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

您可能希望在开始时添加一个0,具体取决于您正在执行的操作。

谢谢!我只是在写这篇文章的时候独立地发现了这一点。非常有用!!不客气。如果有帮助,你可以接受答案。这将有助于建立您在SOThanks的声誉!我只是在写这篇文章的时候独立地发现了这一点。非常有用!!不客气。如果有帮助,你可以接受答案。这将有助于建立你的声誉