如何将值更改为时间类,例如小时“1”到“01:00”

问题描述 投票:0回答:1

我的数据集将时间列为一天中的 0-23 小时。它们已作为字符类导入到 RStudio 中,读取为 00、01、02、03、04、05 等到 23。我需要这些才能成为时间类并以正确的小时:分钟时间格式(00: 00、01:00、02:00、03:00)。时间类并不特别重要,但它只需要包括小时:分钟。此列称为小时数。

A tibble: 6 × 10
##   date       station hours AMB_TEMP    CO    NO   NO2   NOx    O3  PM10
##   <date>     <chr>   <chr>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2015-01-01 Cailiao 00          16  0.74   1      15    16    35   171
## 2 2015-01-01 Cailiao 01          16  0.7    0.8    13    14    36   174
## 3 2015-01-01 Cailiao 02          15  0.66   1.1    13    14    35   160
## 4 2015-01-01 Cailiao 03          15  0.61   1.7    12    13    34   142
## 5 2015-01-01 Cailiao 04          15  0.51   2      11    13    34   123
## 6 2015-01-01 Cailiao 05          14  0.51   1.7    13    15    32   110

我尝试将

hours
的类更改为 POSIXct 并指定格式。它没有给我一个错误,但也没有做任何事情。我也尝试使用 subtr 和 strptime 得到相同的结果。

cleantimedata <- timedata %>% 
mutate(as.POSIXct(hours, format="%H%M"))

mutate(substr(hours, 0, nchar(hours)-2)) %>% 
mutate(paste0(hours, ':', mins))

strftime(strptime(sapply(paste0(hours), function(i) substring(i, nchar(i) - 3,   nchar(i))),    "%H%M"), format = "%H:%M")

我尝试先更改为数字或解析列中的数字。这会删除第二个数字(00 到 0),但不会更改上述结果。格式肯定太简单了,无法使用 parse_time 但我还是试过了

mutate(hours = parse_number(hours))
mutate(hours = parse_time(hours))
mutate(hours, as.numeric(hours)) 

更新:我在下面找到了一个(非优雅的)解决方案。我仍然欢迎其他代码更少的解决方案

clean_timedata <- timedata %>%
mutate(hours = stri_pad_right(hours, 4, 0)) %>% 
mutate(hours = gsub('(..)(?=.)', '\\1:', hours, perl=TRUE)) %>% 
mutate(hours = parse_time(hours)) %>% 
mutate(substr(hours, 1, 5)) %>% 
select(-hours) %>% 
rename("time" = "substr(hours, 1, 5)") %>% 
r datetime tidyr lubridate
1个回答
0
投票

paste() 对你有用吗?

例如:

timedata <- tibble(hours = c("00","01","02","03","04","05","06","07","08","09"))
timedata$hours <- paste(timedata$hours, ":00", sep = "")
timedata$hours
© www.soinside.com 2019 - 2024. All rights reserved.