【发布时间】:2020-07-21 19:56:28
【问题描述】:
我正在尝试获取在不同列上具有日期和时间的数据框中的时差。我首先结合日期和时间列,我已经能够得到差异,但由于时间是 12 小时制,我不断得到负值。 我对 R 不是很精通,也不知道哪里出错了。
我正在添加我使用的代码以及我的数据外观示例。
library(readxl)
library(dplyr)
library(openxlsx)
library(tidyverse)
library(lubridate)
sampledata<-"Date Time
10/1/2001 4.00
10/1/2001 4.15
10/1/2001 4.30
10/1/2001 4.45
10/1/2001 5.00
10/1/2001 5.15
10/1/2001 5.30
10/1/2001 5.45
10/1/2001 6.00
10/1/2001 6.15
10/1/2001 6.30
10/2/2001 6.45
10/2/2001 7.00
10/2/2001 7.15
10/2/2001 7.30
10/2/2001 7.45
10/2/2001 8.00
10/2/2001 8.15
10/2/2001 8.30
10/2/2001 8.45
10/2/2001 9.00
10/2/2001 9.15
10/2/2001 9.30
10/2/2001 9.45
10/2/2001 10.00
10/2/2001 10.15
10/2/2001 10.30
10/2/2001 10.45
10/2/2001 11.00
10/2/2001 11.15
10/2/2001 11.30
10/2/2001 11.45
10/2/2001 12.00
10/2/2001 12.15
10/2/2001 12.30
10/2/2001 12.45
10/2/2001 1.00
10/2/2001 1.15
10/2/2001 1.30
10/2/2001 1.45
10/2/2001 2.00
10/2/2001 2.15
10/2/2001 2.30
10/2/2001 2.45
10/2/2001 3.00
10/2/2001 3.15
10/2/2001 3.30
10/2/2001 4.00
10/2/2001 4.15
10/2/2001 4.30
10/2/2001 4.45
10/2/2001 5.00
10/2/2001 5.15
10/2/2001 5.30
10/2/2001 5.45
10/2/2001 6.00
10/3/2001 6.15
10/3/2001 6.30
10/3/2001 6.45
10/3/2001 7.00
10/3/2001 7.15
10/3/2001 7.30
10/3/2001 7.45
10/3/2001 8.00
10/3/2001 8.15
10/3/2001 8.30
10/3/2001 8.45
10/3/2001 9.00
10/3/2001 9.15
10/3/2001 9.30
10/3/2001 9.45
10/3/2001 10.00
10/3/2001 10.15
10/3/2001 10.30
10/3/2001 10.45
10/3/2001 11.00
10/3/2001 11.15
10/3/2001 11.30
10/3/2001 11.45
10/3/2001 12.00
10/3/2001 12.15
10/3/2001 12.30
10/3/2001 12.45
10/3/2001 1.00
10/3/2001 1.15
10/3/2001 1.30
10/3/2001 1.45
10/3/2001 2.00
10/3/2001 2.15
10/3/2001 2.30
10/3/2001 2.45
10/3/2001 3.00
10/3/2001 3.15
10/3/2001 3.30
10/3/2001 3.45
10/3/2001 4.00
10/3/2001 4.15
10/3/2001 4.30
10/3/2001 4.45
10/3/2001 5.00
10/3/2001 5.15
10/3/2001 5.30
10/3/2001 5.45
10/3/2001 6.00"
#read data
usedata <- read.table(text=sampledata, header = TRUE)
#Combining Date and Time columns
usedata$datetime<-with(usedata, mdy(usedata$Date) + hm(usedata$Time))
#Converting datetime to date and time variables
usedata$datetime<-as.POSIXct(usedata$datetime,format="%Y-%m-%d%H:%M:%S")
#Calculating time difference between each time interval
df<-usedata %>%
group_by(Date)%>%
mutate(Time_Duration = (difftime(datetime, lag(datetime, default = datetime[1]), unit='secs')))
df
df$Time_Duration
当时间从 12 pm 变为 1 pm 时,df$Time_Duration 给出的时间差为负数。我假设这是一个问题,因为我的时间是 12 小时制,但也许是别的。 我尝试使用 strptime 和 format 将 datetime 列转换为 24 小时,然后再找到差异,但我得到了 datetime 列的 NA 值。
我尝试了以下 strptime 代码来转换为 24 小时
x <- strptime(usedata$datetime, format="%Y-%m-%d %I:%M:%S %p")
x
format(x, "%Y-%m-%d %H:%M:%S")
我能得到的任何帮助将不胜感激。谢谢
【问题讨论】:
-
嗨。您的日期和时间是否都按照您的示例严格按递增顺序排列?
-
如果您的数据不包括上午/下午(或类似),您如何“知道”每个时间真正代表什么?
-
是的,这是一个很长的数据集,从 2001 年到 2010 年,日期在增加
-
r2evans,在没有指定上午/下午的情况下输入了时间列,但是对于每个日期,我都知道时间从上午开始,然后以下午结束,在我的 2001 年 10 月 1 日的示例中,时间从凌晨 4 点开始,到 945 点结束