我有一个变量需要转换为军事时间。这个变量很乱,因为它在格式上缺乏一致性。
这是一个可能在变量中找到的示例。
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()
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/