创建 difftime 类型的空向量

问题描述 投票:0回答:2

我有一个名为“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 的初学者,有人可以告诉我如何做到这一点吗? 非常感谢。

r vector
2个回答
2
投票

difftime
不是一个类,而是一个查找时差的函数。 所以你不能用它初始化日期时间向量。 您需要
as.POSIXct
time
列转换为日期时间,然后我们可以使用
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
最后一行的时差结果。 它们实际上是不同的分钟。


0
投票

实际上是十年前的帖子,但这里是初始化 difftime 对象的更直接的答案,以防其他人需要完成此操作(例如我自己)。

t <- as.difftime(numeric(9), units="secs")
t
# Time differences in secs
# [1] 0 0 0 0 0 0 0 0 0
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.