Как я могу извлечь строку по строкам с помощью регулярных выражений? - PullRequest
0 голосов
/ 24 апреля 2020

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

/testData/THQ/TAIRATE.20030314.190000.tif
/testData/THQ/TAIRATE.20030314.200000.tif
/testData/THQ/TAIRATE.20030314.210000.tif
/testData/THQ/TAIRATE.20030314.220000.tif

И я хочу извлечь из этого отметку времени и сохранить ее как другой столбец. Но я не знаком с Regex. Пока я дошел до этого:

tdat %>%
  dplyr::rowwise() %>% 
  dplyr::mutate(timestamp = str_extract(as.character(filename), "[^//TAIRATE]+$")) %>% 
  glimpse()

Результат

.20030314.190000.tif
.20030314.200000.tif
.20030314.210000.tif
.20030314.220000.tif

Ожидаемый результат

20030314190000
20030314200000
20030314210000
20030314220000

Вопрос : Как мне написать правильное регулярное выражение или есть лучший способ?

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Конечно менее изящно, чем решение @ akrun, но оно тоже работает:

paste0(unlist(str_extract_all(filename, "[0-9]+")), collapse = "")

Данные:

filename <- "/testData/THQ/TAIRATE.20030314.190000.tif"
1 голос
/ 24 апреля 2020

str_extract и другие подобные функции векторизованы, вам не нужно построчно.

В этом случае вы можете сделать это в базе R, используя sub.

sub('.*TAIRATE\\.(\\d+)\\.(\\d+).*', '\\1\\2', df$filename)
#[1] "20030314190000" "20030314200000" "20030314210000" "20030314220000"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...