任何帮助都会很棒。
我有一个看起来像这样的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上做到这一点吗?
提前致谢。
答案 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
,但在这种情况下,可以更轻松地动态创建日期时间对象以进行计算。