如何按日期计算时间间隔子设置?

时间:2017-01-24 00:27:54

标签: r subset difftime

任何帮助都会很棒。

我有一个看起来像这样的data.frame:

    Date       Time 
1  2015-06-30 14:30:00 
2  2015-06-30 14:35:00 
3  2015-06-30 14:40:00 
4  2015-07-03 00:25:00 
5  2015-07-03 03:27:00 

我想添加一个新专栏。在这个新列中,考虑到日期,每行在当前行和前一行之间将存在时间差。

例如:

   Date       Time     Diff (min)
1  2015-06-30 14:30:00 0      
2  2015-06-30 14:35:00 5 
3  2015-06-30 14:40:00 5
4  2015-07-03 00:25:00 0 
5  2015-07-03 03:27:00 182

每个日期的第一行的差异应为零。差异不需要在几分钟内。

我发现的所有示例都没有使用行方法进行减法。

我有什么想法可以在R上做到这一点吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

这是通过避免循环以更类似的方式逐步解决方案。代码中的注释应该解释逻辑。

df<-read.table(header=TRUE, sep= " ", 
text= "Date Time
2015-06-30 14:30:00
2015-06-30 14:35:00
2015-06-30 14:40:00
2015-07-03 00:25:00
2015-07-03 03:27:00")

#find time difference
delta<-diff(as.POSIXct(paste(df$Date, df$Time)))

#determine if across different days by finding difference 
#if deltadays >0 then difference days and setting delta to 0
delta[diff(as.Date(df$Date)) >0]<-0

#add zero in front
delta<-c(0, delta)
#create desired dataframe
df<-cbind(df, diff=delta)

由于R没有时间对象(只有日期或日期时间对象),因此需要组合日期和时间列来计算差异。有一些方法可以在R中使用时间对象,但这会涉及添加其他包,例如chron,但在这种情况下,可以更轻松地动态创建日期时间对象以进行计算。