Отделение времени от строки символов, которые имеют несогласованные шаблоны

#time #character #extract #numeric

Вопрос:

Я пытаюсь очистить переменные времени, однако шаблон/формат, в котором они были сообщены, противоречив. Например, одна запись будет выглядеть как «11 утра», а другая-как «10:30 утра». Кажется, я не могу найти функцию, которая позволит мне учитывать несколько шаблонов.

Например, мой необработанный набор данных выглядит следующим образом:

 ID | bedTime   |
----------------
1  | 8pm       |
2  | 9:30 p.m. |
3  | 10:40pm   |
4  | 11:00 PM  |
----------------
 

и я бы хотел, чтобы это выглядело так:

 ID |  bedTime   |  AM/PM  |
---------------------------
1  | 8         |   pm     |
2  | 9:30      |   pm     |
3  | 10:40     |   pm     |
4  | 11:00     |   pm     |
---------------------------
 

Я пробовал использовать extract (), но я могу заставить его работать только с одним типом шаблона, и не смог заставить его работать для тех, у кого есть «.» между буквами. Я вставил код, который использовал ниже.

 df <- extract(df, time, into = c("bedTime","AM/PM"), "^(\d :\d )([a-z] )$" "^(\d )([a-z] )$")
 

Я знаю, как изменить символы верхнего и нижнего регистра с помощью grepl (), но я немного зациклился на том, как удалить эти строки символов из переменных времени.