如何将字符串转换为 R 中的特定时间格式?
How to convert a string to a specific time format in R?
我有一个包含 4000 万行的数据集。目标是从将 Date 和 Time 列合并为一个开始清理它。我能够使用 lubridate 将数据从一个因子转换为数据。这次我想对时间列做同样的事情,所以我可以使用 ymd_hms() 和 paste() 将它们组合在 1 列中作为日期时间。但是,我的时间列有问题。
以下是上述专栏的示例内容:
sample_time_as_string <- c("18:00", "12:57","07:54:40", "17:59:02","01:00" )
目标是将此字符串转换为 hh:mm:ss,例如,“18:00”应变为“18:00:00”,而“17:59:02”应保持不变。这样就可以很容易地合并日期和时间列。
这是我到目前为止使用 lubridate 所做的
sample_time_applied_lubridate <- hms(sample_time_as_string)
Warning message:
In .parse_hms(..., order = "HMS", quiet = quiet) :
Some strings failed to parse, or all strings are NAs
sample_time_applied_lubridate
[1] NA NA "7H 54M 40S" "17H 59M 2S" NA
我尝试了不同的功能
sample_time_applied_lubridate <- hm(sample_time_as_string)
同样的错误
Warning message:
In .parse_hms(..., order = "HM", quiet = quiet) :
Some strings failed to parse, or all strings are NAs
sample_time_applied_lubridate
[1] "18H 0M 0S" "12H 57M 0S" NA NA "1H 0M 0S"
我试过了parse_date_time
sample_time_applied_lubridate <- parse_date_time(sample_time_as_string, orders = "HMS")
Warning message:
3 failed to parse.
你对我可以尝试的方法有什么建议吗?也许 lubridate 不是这个方法的正确方法?
您可以使用 stingr 中的 str_pad
函数来填充没有秒的时间。
library(stringr)
ifelse(nchar(sample_time_as_string)==5,
str_pad(paste0(sample_time_as_string, ":"), width=8, side="right", pad="0"),
sample_time_as_string)
#[1] "18:00:00" "12:57:00" "07:54:40" "17:59:02" "01:00:00"
尝试将两种格式传递给 orders
parse_date_time(c("18:00", "12:57","07:54:40", "17:59:02","01:00" ), orders = c("HM","HMS")) %>%
format("%H:%M:%S")
我有一个包含 4000 万行的数据集。目标是从将 Date 和 Time 列合并为一个开始清理它。我能够使用 lubridate 将数据从一个因子转换为数据。这次我想对时间列做同样的事情,所以我可以使用 ymd_hms() 和 paste() 将它们组合在 1 列中作为日期时间。但是,我的时间列有问题。
以下是上述专栏的示例内容:
sample_time_as_string <- c("18:00", "12:57","07:54:40", "17:59:02","01:00" )
目标是将此字符串转换为 hh:mm:ss,例如,“18:00”应变为“18:00:00”,而“17:59:02”应保持不变。这样就可以很容易地合并日期和时间列。
这是我到目前为止使用 lubridate 所做的
sample_time_applied_lubridate <- hms(sample_time_as_string)
Warning message:
In .parse_hms(..., order = "HMS", quiet = quiet) :
Some strings failed to parse, or all strings are NAs
sample_time_applied_lubridate
[1] NA NA "7H 54M 40S" "17H 59M 2S" NA
我尝试了不同的功能
sample_time_applied_lubridate <- hm(sample_time_as_string)
同样的错误
Warning message:
In .parse_hms(..., order = "HM", quiet = quiet) :
Some strings failed to parse, or all strings are NAs
sample_time_applied_lubridate
[1] "18H 0M 0S" "12H 57M 0S" NA NA "1H 0M 0S"
我试过了parse_date_time
sample_time_applied_lubridate <- parse_date_time(sample_time_as_string, orders = "HMS")
Warning message:
3 failed to parse.
你对我可以尝试的方法有什么建议吗?也许 lubridate 不是这个方法的正确方法?
您可以使用 stingr 中的 str_pad
函数来填充没有秒的时间。
library(stringr)
ifelse(nchar(sample_time_as_string)==5,
str_pad(paste0(sample_time_as_string, ":"), width=8, side="right", pad="0"),
sample_time_as_string)
#[1] "18:00:00" "12:57:00" "07:54:40" "17:59:02" "01:00:00"
尝试将两种格式传递给 orders
parse_date_time(c("18:00", "12:57","07:54:40", "17:59:02","01:00" ), orders = c("HM","HMS")) %>%
format("%H:%M:%S")