Использовать РЕГУЛЯРНОЕ выражение в R для извлечения определенной строки в значении в качестве нового столбца?

#r #regex

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

Вопрос:

У меня есть столбец, содержащий строку символов / значений, которая выглядит следующим образом

Текущий

 111111~24-JUL-17 10:43:36~6.14
  

Желаемый результат

 24-JUL-17 10:43:36
  

Надеясь взять все между ‘~’—> So Date / Time и игнорировать все остальное.

У меня есть этот код прямо сейчас, но, похоже, он принимает только его часть

 df$Last <- gsub(". \s(. )$", "\1", df$col1)
  

Ответ №1:

Мы можем использовать отдельный tidyr, чтобы получить результат ниже:

 library(dplyr)
library(tidyr)
df <- data.frame(c1 = c('111111~24-JUL-17 10:43:36~6.14','111111~24-JUL-21 10:34:36~6.14'))
df
                              c1
1 111111~24-JUL-17 10:43:36~6.14
2 111111~24-JUL-21 10:34:36~6.14
df %>% separate(col = c1, into = c('x','Date','y'), sep = '~') %>% select(2)
                Date
1 24-JUL-17 10:43:36
2 24-JUL-21 10:34:36
 
  

Использование пакета stringr:

 library(dplyr)
library(stringr)
df %>% mutate(c1 = str_extract(c1, '(?<=~).*(?=~)'))
                  c1
1 24-JUL-17 10:43:36
2 24-JUL-21 10:34:36
  

Ответ №2:

Мы можем использовать sub в base R

 df$c1 <- sub(".*~([^~] )~.*", "\1", df$c1)
df$c1
#[1] "24-JUL-17 10:43:36" "24-JUL-21 10:34:36"
  

данные

 df <- data.frame(c1 = c('111111~24-JUL-17 10:43:36~6.14',
       '111111~24-JUL-21 10:34:36~6.14'))