如何找到行名称的时差?

时间:2015-07-18 06:47:06

标签: r

我有一个数据框对象,其行名称是时间戳。 " SIZE"是迄今为止唯一的变量。

                           SIZE
2008-01-14 09:29:49         0
2008-01-14 09:29:59         0
2008-01-14 09:29:59.1       0
2008-01-14 09:30:00        842
2008-01-14 09:30:00.1      34
2008-01-14 09:30:00.2       1
2008-01-14 09:30:00.3       1
2008-01-14 09:30:00.4       1
2008-01-14 09:30:00.5       1
2008-01-14 09:30:02        38

我想创建一个新列,显示与上一行的时差。与第一行的时差可以为空白。

                        SIZE  dtime
2008-01-14 09:29:49      0     NA
2008-01-14 09:29:59      0     10 
2008-01-14 09:29:59.1    0     0.1
2008-01-14 09:30:00    842     0.9
2008-01-14 09:30:00.1   34     0.1
2008-01-14 09:30:00.2    1     0.1
2008-01-14 09:30:00.3    1     0.1
2008-01-14 09:30:00.4    1     0.1
2008-01-14 09:30:00.5    1     0.1
2008-01-14 09:30:02     38     1.5

我正在尝试使用循环来解决它:

file<-as.data.frame(mtq)
L<-nrow(file)
file$dtime<-NA
for (f in 2:L){

  file$dtime[f]<-difftime(row.names(file)[f], row.names(file)[f-1])
}

错误为&#34;替换有12853行,数据有12852&#34;

有人可以给我一些建议吗?

谢谢

1 个答案:

答案 0 :(得分:2)

转换为diff后,您可以使用POSIXctdiff输出的长度将小于数据集的nrow。因此,我们可以在开头添加NA

 df1$dtime <- c(NA,round(diff(as.POSIXct(row.names(df1))),1))
 df1
 #                      SIZE dtime
 #2008-01-14 09:29:49      0    NA
 #2008-01-14 09:29:59      0  10.0
 #2008-01-14 09:29:59.1    0   0.1
 #2008-01-14 09:30:00    842   0.9
 #2008-01-14 09:30:00.1   34   0.1
 #2008-01-14 09:30:00.2    1   0.1
 #2008-01-14 09:30:00.3    1   0.1
 #2008-01-14 09:30:00.4    1   0.1
 #2008-01-14 09:30:00.5    1   0.1
 #2008-01-14 09:30:02     38   1.5

或者

 v1 <- as.POSIXct(row.names(df1))
 df1$dtime <- round(v1-lag(v1),1)