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

tquggr8v  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(85)

我的数据集的时间列为一天中的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")

我尝试更改为numeric或首先解析列中的数字。这将删除第二个数字(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)") %>%
kjthegm6

kjthegm61#

paste()对你有用吗?
例如:

timedata <- tibble(hours = c("00","01","02","03","04","05","06","07","08","09"))
timedata$hours <- paste(timedata$hours, ":00", sep = "")
timedata$hours

相关问题