我有一个名为“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 的初学者,有人可以告诉我如何做到这一点吗? 非常感谢。
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
最后一行的时差结果。 它们实际上是不同的分钟。
实际上是十年前的帖子,但这里是初始化 difftime 对象的更直接的答案,以防其他人需要完成此操作(例如我自己)。
t <- as.difftime(numeric(9), units="secs")
t
# Time differences in secs
# [1] 0 0 0 0 0 0 0 0 0