Итак, мне пришлось сделать несколько предположений о том, что вы пытаетесь сделать, например, о единицах измерения и о том, что вы хотите сделать со значениями символов, но, надеюсь, эта функция даст вам что-то для работы.
Большая проблема со временем заключается в том, что вам нужно несколько довольно четких правил при анализе текста.По мере того, как я получал результаты, мне пришлось добавить несколько if
операторов в функцию, чтобы она работала, но, где это возможно, старайтесь сохранять ваши форматы времени как можно более согласованными.
library(lubridate)
formatTime <- function(x) {
# Check for a : seperator in the text
if(grepl(":",x, fixed = TRUE)) {
y <- unlist(strsplit(x,":", fixed = TRUE))
# If there is no value before the : then add "00" before the :
if(y[1]=="") {
z <- ms(paste("00",y[2],collapse = ":"), quiet=TRUE)
} else {
z <- ms(paste(y,collapse = ":"), quiet=TRUE)
}
} else {
# If there is no : then add "00" after the :
z <- ms(paste(x,"00",collapse = ":"), quiet=TRUE)
}
# If it did not pare with ms, i.e. it was a character, then assign zero time "00:00"
if(is.na(z)) z <- ms("0:00")
# Converted to duration due to issues returning period with lapply.
# Make dataframe to retun units and name with lapply.
return(data.frame(time = as.duration(z)))
}
# Convert factor variable to character
ab$b <- as.character(ab$b)
ab <- cbind(ab,rbindlist(lapply(ab$b,formatTime)))
Я начал с попыткиработать с периодом времени, но он не будет корректно возвращаться с оператором применения, поэтому я преобразовал в продолжительность.Это может не отображаться так же, как ваш пример, но должно хорошо работать с графиками.
Дайте мне знать, если я пропустил то, что вам нужно, и я обновлю ответ.