我试图计算data.frame中两次连续观察之间的时间差,称为temp。我有时间和日期:
id version date time
872169 261986 0 2012-01-13 24:24:34
872170 262026 0 2012-01-13 24:26:11
872171 262037 0 2012-01-13 00:02:46
872172 262053 0 2012-01-14 00:10:28
872173 262074 0 2012-01-14 00:28:42
872174 262090 0 2012-01-15 14:29:31
时间向量的类当然是times
。
现在我可以创建一个包含差异的向量:
count< - as.difftime(temp [,6],units =“mins”)
但我如何解释这些日子呢?我尝试了几件事:我将日期和时间向量结合起来:
as.difftime(paste(temp[,4], temp[,6]), unit="min")
但这只给了我NA。
另外
as.difftime(strptime( paste(temp[,4], temp[,6]), "%Y-%m-%d %H:%M:%S"), unit="mins")
没用。
difftime()
也不起作用,因为日期不在两个不同的向量中。我可以想到复制日期向量并向上移动它,以便第二个日期向量的第一个值是第一个日期向量的第二个元素。但必须有更聪明的东西。
提前致谢!
答案 0 :(得分:1)
使用两列作为输入:
> temp <- read.table(text=" id version date time
+ 872169 261986 0 2012-01-13 24:24:34
+ 872170 262026 0 2012-01-13 24:26:11
+ 872171 262037 0 2012-01-13 00:02:46
+ 872172 262053 0 2012-01-14 00:10:28
+ 872173 262074 0 2012-01-14 00:28:42
+ 872174 262090 0 2012-01-15 14:29:31", header=TRUE, stringsAsFactors=FALSE)
# didn't actually need the as.character but you probably have factor variables
> temp$tm <- as.POSIXct( paste(as.character(temp[[3]]), as.character(temp[[4]]) ) )
> temp$count <- c(NA, as.numeric(diff( temp$tm , units="min"))/60 )
> temp
id version date time tm count
872169 261986 0 2012-01-13 24:24:34 2012-01-13 NA
872170 262026 0 2012-01-13 24:26:11 2012-01-13 0
872171 262037 0 2012-01-13 00:02:46 2012-01-13 0
872172 262053 0 2012-01-14 00:10:28 2012-01-14 1440
872173 262074 0 2012-01-14 00:28:42 2012-01-14 0
872174 262090 0 2012-01-15 14:29:31 2012-01-15 1440
我发现你的日期时间不正确;同时使用&#34; 24&#34;和&#34; 00&#34;几个小时。这是没有意义的。如果我们将24更改为23,则按预期工作:
> temp$tm <- as.POSIXct( paste(as.character(temp[['date']]), as.character(temp[['time']]) ) )
> temp$count <- c(NA, as.numeric(diff( temp$tm , units="min"))/60 )
> temp
id version date time tm count
872169 261986 0 2012-01-13 23:24:34 2012-01-13 23:24:34 NA
872170 262026 0 2012-01-13 23:26:11 2012-01-13 23:26:11 0.02694444
872171 262037 0 2012-01-13 00:02:46 2012-01-13 00:02:46 -23.39027778
872172 262053 0 2012-01-14 00:10:28 2012-01-14 00:10:28 24.12833333
872173 262074 0 2012-01-14 00:28:42 2012-01-14 00:28:42 0.30388889
872174 262090 0 2012-01-15 14:29:31 2012-01-15 14:29:31 38.01361111