我有一个名为“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的初学者,是否有人可以向我展示如何做到这一点? 非常感谢你。
答案 0 :(得分: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
最后一行的时差结果。它们实际上是不同的分钟。