R 将HH:MM:SS列转换为ZT时间
我希望有人能在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。。。等等等等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的时间字符向量转换为格
有人能帮我吗?非常感谢 不确定这是否是您想要的,但这似乎可以将格式为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将更容易帮助您。