R 如何将数字小时值转换为 %H:%M:%S 并将时间添加到日期
R How to convert numerical hour value to %H:%M:%S and add time to a date
如果包含类似于
的数据的大型数据集
df<- Energy Power StartTime Timehour
7.50 10 2017-10-18 09:47:10.073 0.75
1) 我想把时间小时数据转成时间
df<- Energy Power StartTime Timehour
7.50 10 2017-10-18 09:47:10.073 00:45:00
2) 然后我想将时间小时值添加到开始时间
df<- Energy Power StartTime Timehour NewTime
7.50 10 2017-10-18 09:45:10.000 00:45:00 2017-10-18 10:30:10.000
对于 1) 我尝试用
更改时间符号
df$Timehour <- as.Date(df$Timehour)
df$Timehour <- format(as.POSIXct(df$Timehour)*86400, origin = "1970-01-01",tz = "UTC", "%H:%M:%OS")
但是我收到以下消息
Error in as.POSIXct.numeric(df$Timehour) :
'origin'必须提供
有人可以帮我解决我的第一个和第二个问题吗?
如果您使用 lubridate 将您的时间小时数转换为分钟数,您可以将其添加到开始时间列
library(lubridate)
library(tidyverse)
library(readr)
df <- read_table("Energy Power StartTime Timehour
7.50 10 2017-10-18 09:47:10.073 0.75")
df %>% mutate(
minutes = minutes(round(Timehour * 60)),
newTime = StartTime + minutes)
# A tibble: 1 x 6
Energy Power StartTime Timehour minutes newTime
<dbl> <int> <dttm> <dbl> <S4: Period> <dttm>
1 7.50 10 2017-10-18 09:47:10 0.750 45M 0S 2017-10-18 10:32:10
如果需要,首先使用
将 StartTime 列转换为数据时间 class
df <- df %>% mutate(StartTime = ymd_hms(StartTime))
基本解决方案:您需要将时间以秒为单位,以便将其简单地添加到 Posixct
df$Timehour <- df$Timehour*3600
df$StartTime <- as.POSIXct(as.character(df$StartTime),format = "%Y-%m-%d %H:%M:%OS")
df$newtime <- df$StartTime + df$Timehour
Energy Power StartTime Timehour newtime
1 7.5 10 2017-10-18 09:47:10 2700 2017-10-18 10:32:10
您可以通过这种方式将您的时间转换为所需的格式:
df$Timehour <- strftime(as.POSIXct(df$Timehour,origin='1900-01-01 00:00'),format="%H:%M:%S",tz = "GMT")
Energy Power StartTime Timehour newtime
1 7.5 10 2017-10-18 09:47:10 00:45:00 2017-10-18 10:32:10
数据:
df<- read.table(text = "Energy, Power, StartTime, Timehour
7.50, 10 , 2017-10-18 09:47:10, 0.75",header = TRUE ,sep = ",")
如果包含类似于
的数据的大型数据集 df<- Energy Power StartTime Timehour
7.50 10 2017-10-18 09:47:10.073 0.75
1) 我想把时间小时数据转成时间
df<- Energy Power StartTime Timehour
7.50 10 2017-10-18 09:47:10.073 00:45:00
2) 然后我想将时间小时值添加到开始时间
df<- Energy Power StartTime Timehour NewTime
7.50 10 2017-10-18 09:45:10.000 00:45:00 2017-10-18 10:30:10.000
对于 1) 我尝试用
df$Timehour <- as.Date(df$Timehour)
df$Timehour <- format(as.POSIXct(df$Timehour)*86400, origin = "1970-01-01",tz = "UTC", "%H:%M:%OS")
但是我收到以下消息
Error in as.POSIXct.numeric(df$Timehour) :
'origin'必须提供
有人可以帮我解决我的第一个和第二个问题吗?
如果您使用 lubridate 将您的时间小时数转换为分钟数,您可以将其添加到开始时间列
library(lubridate)
library(tidyverse)
library(readr)
df <- read_table("Energy Power StartTime Timehour
7.50 10 2017-10-18 09:47:10.073 0.75")
df %>% mutate(
minutes = minutes(round(Timehour * 60)),
newTime = StartTime + minutes)
# A tibble: 1 x 6
Energy Power StartTime Timehour minutes newTime
<dbl> <int> <dttm> <dbl> <S4: Period> <dttm>
1 7.50 10 2017-10-18 09:47:10 0.750 45M 0S 2017-10-18 10:32:10
如果需要,首先使用
将 StartTime 列转换为数据时间 classdf <- df %>% mutate(StartTime = ymd_hms(StartTime))
基本解决方案:您需要将时间以秒为单位,以便将其简单地添加到 Posixct
df$Timehour <- df$Timehour*3600
df$StartTime <- as.POSIXct(as.character(df$StartTime),format = "%Y-%m-%d %H:%M:%OS")
df$newtime <- df$StartTime + df$Timehour
Energy Power StartTime Timehour newtime
1 7.5 10 2017-10-18 09:47:10 2700 2017-10-18 10:32:10
您可以通过这种方式将您的时间转换为所需的格式:
df$Timehour <- strftime(as.POSIXct(df$Timehour,origin='1900-01-01 00:00'),format="%H:%M:%S",tz = "GMT")
Energy Power StartTime Timehour newtime
1 7.5 10 2017-10-18 09:47:10 00:45:00 2017-10-18 10:32:10
数据:
df<- read.table(text = "Energy, Power, StartTime, Timehour
7.50, 10 , 2017-10-18 09:47:10, 0.75",header = TRUE ,sep = ",")