我的数据集的时间列为一天中的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)") %>%
1条答案
按热度按时间kjthegm61#
paste()对你有用吗?
例如: