R 将HH:MM:SS列转换为ZT时间

R 将HH:MM:SS列转换为ZT时间,r,R,我希望有人能在R-studio帮我解答一个逻辑问题。我有一个相当大的数据集,其中一列是“时间”。此列的值范围为00:00:00到23:59:00,格式为HH:MM:SS 由于在这种格式下分析时间时遇到了一些麻烦,我试图创建一个新的列,称为“ZT”,在这里我将这个时间列转换为ZT时间。灯在早上7点亮,因此需要时间07:00:00对应ZT=0,07:01:00对应ZT=0.016。。。等等等等 有人能帮我吗?非常感谢 不确定这是否是您想要的,但这似乎可以将格式为HH:MM:SS的时间字符向量转换为格

我希望有人能在R-studio帮我解答一个逻辑问题。我有一个相当大的数据集,其中一列是“时间”。此列的值范围为00:00:00到23:59:00,格式为HH:MM:SS

由于在这种格式下分析时间时遇到了一些麻烦,我试图创建一个新的列,称为“ZT”,在这里我将这个时间列转换为ZT时间。灯在早上7点亮,因此需要时间07:00:00对应ZT=0,07:01:00对应ZT=0.016。。。等等等等


有人能帮我吗?非常感谢

不确定这是否是您想要的,但这似乎可以将格式为HH:MM:SS的时间字符向量转换为格式为HH:MM:SS的ZT时间,从上午7点开始,即00:00:00

我不清楚你说07:01:00应该对应ZT=0.016的确切意思,但这可能是一个开始

公平警告这有点慢(在我的机器上花了大约1分钟),但也许其他人可以帮助实现矢量化并加快速度:

#Make Some Fake Data
df<-data.frame(Time=format(seq(ISOdate(2020,1,1), ISOdate(2020,2,1), by = "min"), '%H:%M:00'), Variable1=runif(n=44641))

#We need the help of a an external package to handle time in HH:MM:SS format
library(lubridate)

time_store<- hms(df$Time) #Convert your times to HMS format
ZT_vec<-vector() #Create an empty vector that we will fill in
for (i in 1:length(time_store)){ #iterate over each observation
  if (hour(time_store[i])<7){ #Make sure the conversions are going the right direction
    ZT<-time_store[i]+hours(17)
    ZT_vec<-c(ZT_vec,sprintf("%02d:%02d:%02d", hour(ZT), minute(ZT), second(ZT))) #format the times in HH:MM:SS
  } else {
    ZT<-time_store[i]-hours(7)
    ZT_vec<-c(ZT_vec,sprintf("%02d:%02d:%02d", hour(ZT), minute(ZT), second(ZT)))
  }
}

df<-cbind(df,ZT_vec) #Bind on our new column

head(df)
    Time Variable1   ZT_vec
12:00:00 0.6560604 05:00:00
12:01:00 0.3485023 05:01:00
12:02:00 0.8396784 05:02:00
12:03:00 0.4773929 05:03:00
12:04:00 0.6969242 05:04:00
12:05:00 0.5371502 05:05:00

head(df[4020:4025,])

    Time Variable1   ZT_vec
06:59:00 0.6758364 23:59:00
07:00:00 0.1255861 00:00:00
07:01:00 0.2789485 00:01:00
07:02:00 0.2175933 00:02:00
07:03:00 0.1855100 00:03:00
07:04:00 0.1632865 00:04:00
#制作一些虚假数据

如果包含一个简单的示例输入和所需的输出,可用于测试和验证可能的解决方案,dfIt将更容易帮助您。