我有一个名为“ 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
。他们实际上是不同的分钟。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句