Несколько способов сделать это:
1) Использование регулярного выражения
df$time <- sub('.*\\s+(.*) UTC', '\\1', df$start.time)
df
# start.time time
#1 2020/01/05 21:30:04 UTC 21:30:04
#2 2020/01/05 21:30:04 UTC 21:30:04
#3 2020/01/05 21:30:04 UTC 21:30:04
#4 2020/01/05 21:30:04 UTC 21:30:04
#5 2020/01/05 21:30:04 UTC 21:30:04
#6 2020/01/05 21:30:04 UTC 21:30:04
Здесь мы фиксируем все между пробелами и "UTC"
. \\1
используется как обратная ссылка для захвата извлеченного значения.
2) Преобразовать в POSIXct
, а затем format
Это можно сделать в базе R:
format(as.POSIXct(df$start.time, format = "%Y/%m/%d %T"), "%T")
Или с использованием lubridate
format(lubridate::ymd_hms(df$start.time), "%T")
данные
df <- structure(list(start.time = structure(c(1L, 1L, 1L, 1L, 1L, 1L
), .Label = "2020/01/05 21:30:04 UTC", class = "factor")),
class = "data.frame", row.names = c(NA,-6L))