创建difftime类型的空向量

时间:2014-11-23 21:37:10

标签: r vector

我有一个名为“log”的数据框,如下所示:

  ID    time                        user     
  1     2014-09-19 13:57:36         Alice    
  2     2014-09-19 13:58:06         Alice    
  3     2014-09-19 13:58:16         Alice    
  4     2014-09-19 13:58:36         Alice    
  5     2014-09-19 13:59:56         Alice    
  6     2014-09-19 13:59:56         Bob      
  7     2014-09-19 13:59:57         Bob      
  8     2014-09-19 13:59:59         Bob      
  9     2014-09-19 14:00:04         Bob      

我想添加一个difftime类型的新列。用户第一次出现时为0,否则应为当前时间减去上一次。 所需的输出应为:

  ID    time                        user      timediff
  1     2014-09-19 13:57:36         Alice     0
  2     2014-09-19 13:58:06         Alice     30
  3     2014-09-19 13:58:16         Alice     10
  4     2014-09-19 13:58:36         Alice     20
  5     2014-09-19 13:59:56         Alice     20
  6     2014-09-19 13:59:56         Bob       0
  7     2014-09-19 13:59:57         Bob       1
  8     2014-09-19 13:59:59         Bob       2
  9     2014-09-19 14:00:04         Bob       5

我的计划是创建一个大小为9的difftime矢量,但是我收到了一个错误。

  

t< - difftime(9)

Error in as.POSIXct.numeric(time1) : 'origin' must be supplied

我是R的初学者,是否有人可以向我展示如何做到这一点? 非常感谢你。

1 个答案:

答案 0 :(得分:2)

difftime不是一个类,而是一个查找时差的函数。因此,您无法使用它初始化日期时间向量。您需要as.POSIXcttime列转换为日期时间,然后我们可以使用diff,因为它有POSIXt的方法

您可以使用dplyr进行分组计算。

library(dplyr)
group_by(log, user) %>% mutate(timediff = c(0, diff(as.POSIXct(time))))
#   ID                time  user timediff
# 1  1 2014-09-19 13:57:36 Alice        0
# 2  2 2014-09-19 13:58:06 Alice       30
# 3  3 2014-09-19 13:58:16 Alice       10
# 4  4 2014-09-19 13:58:36 Alice       20
# 5  5 2014-09-19 13:59:56 Alice       80
# 6  6 2014-09-19 13:59:56   Bob        0
# 7  7 2014-09-19 13:59:57   Bob        1
# 8  8 2014-09-19 13:59:59   Bob        2
# 9  9 2014-09-19 14:00:04   Bob        5

注意:您可能错误地计算了Alice最后一行的时差结果。它们实际上是不同的分钟。