Вот два различных подхода, использующих separate
и extract
из tidyr
:
library(dplyr)
library(tidyr)
df %>%
mutate(filename2 = gsub("^(\\w+)_(\\d+)_.+?_(\\w+)_(\\d{2})_(\\d{2}).+$",
"\\1_\\2_\\3_\\5.\\4.\\2", basename(filename))) %>%
separate(filename2, c("conference", "year", "country", "date"), sep = "_")
или extract
:
df %>%
extract(filename, c("conference", "year", "country", "day", "month"),
"^.+/(\\w+)_(\\d+)_.+?_(\\w+)_(\\d{2})_(\\d{2}).+$",
remove = FALSE) %>%
unite(date, month, day, year, sep = ".", remove = FALSE) %>%
select(paragraph, filename, conference, year, country, date)
Результат:
paragraph
1 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
filename conference year country date
1 ./data/RevCon_2015_C1_Austria_05_06.txt RevCon 2015 Austria 06.05.2015
Примечания:
- При первом подходе
gsub
используется для сопоставления каждого «столбца», который мы хотим использовать с помощью групп захвата, и повторно-заказ по желанию.Обратите внимание, что добавлено _
, чтобы различать столбцы - Я использовал функцию
basename
, чтобы извлечь все после того, как последний /
separate
затем используется для разделения элементовв фактические столбцы с разделителем _
- Во втором подходе используется то же регулярное выражение, но вместо перестановки
extract
обрабатывает каждую группу захвата как отдельный столбец unite
связывает month
, day
и year
вместе без удаления исходных столбцов - Наконец
select
удаляет day
и month
и изменяет порядок столбцов