r - 如何将带有字符串的混合时间格式转换为军事时间?

标签 r regex string time

我有一个变量需要转换为军事时间。这个变量很乱,因为它在格式上缺乏一致性。

这是一个可能在变量中找到的示例。

x <- c("0.9305555555555547", "15:20 Found", "10:00:00 AM Found", "0.125", "Found 1525")

到目前为止,我在使用 RegEx 以更一致的格式获取所有内容方面取得了一些成功:

x <- str_extract(x, "[0-9]+.+[0-9]|[0-9][0-9][:][0-9][0-9]")
x <- str_remove(x, "[:]") 
x <- str_remove(x, "[:][0-9][0-9]$")

如您所见,我得到:“0.9305555555555547”、“1520”、“1000”、“0.125”、“1525”

问题是小数点需要乘以 2400 才能回到军用时间,但我也不想乘以整数(因为那些已经在军用时间)。

x 本质上是数据帧中的一个变量。

我正在考虑使用 if/else 逻辑,但我不知道如何实现它。

澄清一下,我想要:

输入:“0.9305555555555547”、“15:20 找到”、“10:00:00 AM 找到”、“0.125”、“15:25 找到”

输出:“2233”、“1520”、“1000”、“0300”、“1525”

最佳答案

在对正则表达式进行预处理后,您可以在此处使用 str_detect()

实现 if/else 逻辑
x <- ifelse(str_detect(x, "\\."),
            as.integer(as.numeric(x) * 2400),
            as.integer(x)) %>% 
  sprintf("%04d", .)

这将以字符形式返回您想要的输出

然后你可以做这样的事情来将它解析为 POSIXct

x <- as.POSIXct(x,
         format = "%H%M",
         origin = "1970-01-01",
         tz = "UTC")

关于r - 如何将带有字符串的混合时间格式转换为军事时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71087993/

相关文章:

用于匹配以 # 开头的完整单词的正则表达式 (Javascript)

c# - 获取子字符串 - 特定字符之前的所有内容

swift - 如何使用位置将 Swift 子字符串替换为不等于子字符串?

c - 参数列表是否将字符串引号传递给 C 中的 exec 命令?

r - 在 dplyr 中有效地折叠、排序和删除因子

r - 如何编写函数列表

r - 迭代地将具有相似名称的对象分配为函数参数,摆脱 -eval(parse())-

r - 确定某项在变量中的出现次数

regex - 正则表达式 - 匹配空格

Node.js 和 RegEx - 匹配字符串中的 "assignments"