R: попытка использовать регулярное выражение для изменения объектов в векторе

#r #regex

#r #регулярное выражение

Вопрос:

Я взял лучшие результаты из более крупной базы данных, чтобы упростить это, и поместил их в вектор ниже:

 trialsid <- c(t16740429-1, t16740429-2, t16740429-3, t16740429-4, t16740429-5)
 

Теперь, если мы сосредоточимся на t16740429-1, целью будет преобразовать его в 1674-04-29, однако я не уверен, как этого добиться.

Я думаю, что мне нужно было бы сделать что-то вроде этого:

 trialid_readable <- trialid %>% paste0(str_replace(?), "-", str_replace(?), "-", str_replace(?))
 

Создание групп захвата для достижения.

Я также думал о регулярных выражениях = \d{1,4}, \d{5,6} и \d{7,8}.

Тем не менее, я не уверен, как собрать все это вместе.

Ответ №1:

Использование базового R:

 trialsid <- c('t16740429-1', 't16740429-2', 't16740429-3', 't16740429-4', 't16740429-5')
trialsid
[1] "t16740429-1" "t16740429-2" "t16740429-3" "t16740429-4" "t16740429-5"
gsub('t(\d{4})(\d{2})(\d{2})-.','\1-\2-\3',trialsid)
[1] "1674-04-29" "1674-04-29" "1674-04-29" "1674-04-29" "1674-04-29"
 

Ответ №2:

{n,m} означает совпадение между n и m вхождениями предыдущего шаблона:

 str_replace(trialsid, "t(\d{4})(\d{2})(\d{2}). ", "\1-\2-\3")
[1] "1674-04-29" "1674-04-29" "1674-04-29" "1674-04-29" "1674-04-29"