我有一个数据框对象,其行名称是时间戳。 " 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;
有人可以给我一些建议吗?
谢谢
答案 0 :(得分:2)
转换为diff
后,您可以使用POSIXct
。 diff
输出的长度将小于数据集的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)