#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'))