1

任何帮助都会很棒。

我有一个看起来像这样的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

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

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

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

提前致谢。

4

1 回答 1

0

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

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但在这种情况下,动态创建日期时间对象以进行计算更容易。

于 2017-01-25T01:00:01.583 回答