У меня есть фрейм данных с полем с именем "full.path.name"
Это содержит такие вещи, как
s: /// 01 GROUP / 01 SUBGROUP / ~ $ имя документа имеет пробел. docx
01 GROUP - это шаблон переменного размера во всей строке.
Я хотел бы добавить новое поле во фрейм данных с именем "short.path"
и он будет содержать такие вещи, как
с: /// 01 ГРУППА
s: /// 02 GROUP LONGER NAME
Мне удалось извлечь последние четыре символа файла с помощью stringr, я думаю, что мне следует снова использовать stringr.
Это дает мне расширение файла
sfiles$file_type<-as.factor(str_sub(sfiles$Type.of.file,-4))
Я пошел к https://www.regextester.com/
и получил это
s:///*.[^/]*
в качестве регулярного выражения для использования
поэтому я попробовал это ниже
sfiles$file_path_short<-as.factor(str_match(sfiles$Full.path.name,regex("s:///*.[^/]*")))
Я думал, что получу новое поле в моем фрейме данных, содержащее
01 группа и т. Д.
Я получаю NA
Когда я пытаюсь это
sfiles$file_path_short<-str_extract(sfiles$Full.path.name,"[S]")
дает мне S
Куда я иду не так?
Когда я использую: https://regexr.com/
я получил
\ d * [A-Z] * [A-Z] * [^ /]
Как мне вставить это в
sfiles$file_path_short<-str_extract(sfiles$Full.path.name,\d* [A-Z]* [A-Z]*[^\/])
И заставить все работать?
EDIT:
Здесь есть два решения.
Сначала решения не работали, потому что
sfiles$Full.path.name
было> 255 в некоторых случаях.
Что я сделал:
Чтобы заставить регулярное выражение g_t_m работать
library(tidyverse)
#read the file
sfiles1<-read.csv("H:/sdrive_files.csv", stringsAsFactors = F)
# add a field to calculate path length and filter out
sfiles$file_path_length <- str_length(sfiles$Full.path.name)
sfiles<-sfiles%>%filter(file_path_length <=255)
# then use str_replace to take out the full path name and leave only the
top
# folder names
sfiles$file_path_short <- as.factor(str_replace(sfiles$Full.path.name, "
(^.+?/[^/]+?)/.+$", "\\1"))
levels(sfiles$file_path_short)
[1] "S: /// 01 ГРУППА 1"
[2] "S: /// 02 ГРУППА 2"
[3] "S: /// 03 ГРУППА 3"
[4] "S: /// 04 ГРУППА 4"
[5] "S: /// 05 ГРУППА 5"
[6] "S: /// 06 ГРУППА 6"
[7] "S: /// 07 ГРУППА 7
Я думаю, что это поле full.path.name вызывало проблемы.
Чтобы заставить ответ Виктора работать, я сделал это:
#read the file
sfiles<-read.csv("H:/sdrive_files.csv", stringsAsFactors = F)
str(sfiles)
sfiles$file_path_length <- str_length(sfiles$Full.path.name)
sfiles<-sfiles%>%filter(file_path_length <=255)
sfiles$file_path_short <- str_replace(sfiles$Full.path.name, "
(^.+?/[^/]+?)/.+$", "\\1")