Заменить первые символы в векторе строк в R - PullRequest
0 голосов
/ 09 июля 2020

Итак, у меня есть вектор символьных строк (не форматированный как время намеренно).

TIME
00:35 AM
08:34 AM
10:10 AM
10:00 PM
09:45 PM
02:00 PM
07:47 PM
12:22AM

Я хотел бы сделать так, чтобы ведущие 0 исчезли. Если есть два ведущих 0, то это должно быть 12. Обратите внимание на лишний пробел в последней записи, некоторые данные имеют такой формат, поэтому решение должно это учитывать.

Желаемый конечный результат:

TIME
12:35 AM
 8:34 AM
10:10 AM
10:00 PM
 9:45 PM
 2:00 PM
 7:47 PM
12:22 AM

Предпочтительно решение Tidyverse, но я попытался использовать str_remove безрезультатно.

Ответы [ 4 ]

1 голос
/ 09 июля 2020
library(magrittr) # Other packages import the %>% also nowadays
x %>% sub("^00", "12", .) %>% sub("^0", "", .)
# [1] "12:35 AM"  "8:34 AM"   "10:10 AM"  "10:00 PM"  "9:45 PM"   "2:00 PM"   "7:47 PM"   "12:22  AM"

Воспроизводимые данные:

x <- c("00:35 AM", "08:34 AM", "10:10 AM", "10:00 PM", "09:45 PM", "02:00 PM", "07:47 PM", "12:22  AM")
0 голосов
/ 09 июля 2020

Это решение, которое учитывает также случаи, когда AM или PM присоединяется к части di git переменной TIME

data %>% 
  mutate(TIME = ifelse(!grepl(" ", TIME),
                       sub("(AM$)|(PM$)", " \\1\\2", sub("^0", "", sub("^00", "12", TIME))),
                       sub("^0", "", sub("^00", "12", TIME)))) 

" \\1\\2" замена означает, что требуется либо первое, либо второе подвыражение в скобках - (AM$) или (PM$) - шаблона регулярного выражения.

Вывод

#       TIME
# 1 12:35 AM
# 2  8:34 AM
# 3 10:10 AM
# 4 10:00 PM
# 5  9:45 PM
# 6  2:00 PM
# 7  7:47 PM
# 8 12:22 AM
0 голосов
/ 09 июля 2020

Вы можете использовать это:

Time <- c("00:35 AM", "08:34 AM", "10:10 AM", "22:00 PM", "21:45 PM", "02:00 AM", "07:47 AM", "14:22  PM")

Time2 <- ifelse(substring(Time,1,1)=='0',substring(Time,2,nchar(Time)),Time)
0 голосов
/ 09 июля 2020

используйте базу sub и регулярное выражение для замены 00:00 на 12:00 в начале строки:

sub("^00", "12", "00:35 AM")

вернет "" 12:35 AM " . Чтобы удалить начальные нули, используйте sub после этого:

sub("^0", "", "03:35 AM")"

вернет «3:35 AM». Надеюсь, вы уловили идею

Best

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...