конкретный шаблон и позиция gsub в символьной строке
Это, вероятно, довольно простое исправление, но я не так хорошо разбираюсь в RegExpr, как было бы идеально, поэтому помощь приветствуется. Я искал в другом месте, и у меня ничего не работает.
Я пытаюсь стандартизировать некоторые названия университетских степеней. Мне нужен такой формат:
Код ученой степени - Основное имя EG - «BA - Computer Stuff»
IE слово, одиночный пробел, тире, одиночный пробел, слово.
Он не распознает несколько пробелов на одной или обеих сторонах тире, и если он не видит пробелов, он заменяет буквы по обе стороны тире строчными буквами s, где я думал, что это \ s или \ s пробел, и это будет заменять.
Этот один бит исправления формата является частью более крупного оператора mutate, IE одна строка с скобками, как пример в другом месте, для меня не сработает.
У меня есть пример данных:
data <- data.frame( var = c("BA-English" , "BA - English" , "BA - Chemistry" , "BS - Rubber Chickens") )
var %>%
mutate(var = gsub("\\w\\S-\\S\\w", "\\w\\s-\\s\\w", var) ) -> var_fix )
Любая помощь очень ценится. Спасибо

1 ответ
Вы можете использовать
gsub("\\s*-\\s*", " - ", var)
## Or, if the hyphen is in between word chars
gsub("\\b\\s*-\\s*\\b", " - ", var)
См. Демонстрацию регулярного выражения №1 и демонстрацию регулярного выражения №2 .
Детали :
\b
- граница слова\s*
- ноль или более пробелов-
- дефис
Примечание : если вы хотите нормализовать дефисы, вы также можете рассмотреть возможность использованияgsub("(*UCP)\\s*[\\p{Pd}\\x{00AD}\\x{2212}]\\s*", " - ", var, perl=TRUE)
/gsub("(*UCP)\\b\\s*[\\p{Pd}\\x{00AD}\\x{2212}]\\s*\\b", " - ", var, perl=TRUE)
, куда(*UCP)
делает границы слова и пробелы с учетом Unicode,\p{Pd}
соответствует любому тире Unicode,\x{00AD}
соответствует мягкому дефису и\x{2212}
соответствует символу минус.
-
11) - это работает! 2) - вы добавили контекст для каждой части RegExpr, что очень полезно! СПАСИБО !!!!!!
Другие вопросы
- Как получить номер ASIN Amazon?1 ответ
Закрыто . Этот вопрос должен быть более конкретным . В настоящее время он не принимает ответы. Хотите улучшить этот вопрос? Обновите вопрос, чтобы он фокусировался только на одной проблеме, отредактировав этот пост . Закрыт 10 дней назад . Уточните этот вопросwww.amazon.in/gp/slredirect/picassoRed...
- Регулярное выражение Python соответствует всему, что находится между скобками, а также включает скобки в результате [дубликат]1 ответ
На этот вопрос уже есть ответы здесь : Какое регулярное выражение соответствует квадратной скобке? (8 ответов) Закрыт 11 дней назад . Есть ли способ сопоставить все, что находится в скобках [], а также включить скобки в результат без необходимости добавлять их позже?...
- Моя горизонтальная полоса обрезает текст, когда я сохраняю изображение. Как сделать полосы короче, а текст длиннее?1 ответ
Я новичок в R, так что простите мое невежество. Итак, я создал базовую горизонтальную гистограмму, используяbarplot( ). Мой текст на оси Y в основном исчезает. [IMG_OUR_ID=67.png] [IMG_OUR_ID=68.png] Есть ли способ удлинить и отобразить текст? Это мой код:barplot(mydata$`Sum Impact Risk`~mydata$`Eco...
- Почему case_when () вычисляет ложное условие?3 ответ
У меня есть data.frame с групповой переменной и целочисленной переменной с отсутствующими данными.df<-data.frame(group=c(1,1,2,2,3,3),a=as.integer(c(1,2,NA,NA,1,NA))) Я хочу вычислить максимально доступное значение переменнойa внутри каждой группы: в моем примере я должен получить 2 для группы 1...
- Удаление повторяющихся строк на основе самой последней записи3 ответ
Приношу свои извинения, поскольку я знаю, что варианты этого вопроса задавались раньше, но я попытался найти предоставленные ответы и не смог применить их к своим данным. У меня есть следующие данные по результатам опроса. Несколько человек прошли опросы для участия в различных вебинарах. Человек мо...
- Объедините набор переменных списка в фрейм данных, используя список, который ссылается на эти переменные списка1 ответ
Это было сложно сформулировать, поэтому создали пример. У меня есть набор переменных списка, которые я хотел бы объединить в фрейм данных. Это примеры списковa <- 2:7 b <- 9:14 c <- 25:30 d <- 31:36 У меня есть список, в котором есть элементы, которые ссылаются на приведенные выше имен...
- Я хочу добавить процент подсчета для каждой категории в качестве метки на мою круговую диаграмму ggplot1 ответ
Я использую код:age_pie_chart <- ggplot(data = data , aes(x = "", fill = `Q1: How old are you?`))+ geom_bar(position = "fill", width = 1) + coord_polar(theta = "y") + xlab("") + ylab("") + blank_theme + scale_fill_grey()+ theme(axis.text.x...
- Как вернуться к старому фрейму данных при удалении вновь добавленного столбца?1 ответ
Проблема Я объединил большое количество наборов данных в один фрейм данных. Затем я хочу использовать этот большой фрейм данных во всем своем коде. Однако иногда я хочу использовать только один из более мелких ранних наборов данных, но делать это с моим существующим большим фреймом данных. Я чувству...
- Обновляет data.table при передаче в качестве аргумента функции2 ответ
Когда я передаю data.table в качестве аргумента функции, я могу обновить эту таблицу «по ссылке» в вызываемой функции, и результаты будут применены к исходному объекту. Однако, если я делаю что-то, что требует «глубокой копии» (например, rbindlist для добавления строк), копия существует только в выз...
- Сгруппированный фильтр на основе нескольких столбцов2 ответ
У меня есть фрейм данных с 71 группой, 4 наблюдениями на группу и 18 переменными. Я хотел бы удалить всю группу, если какое-либо наблюдение в этой группе имеет меньше определенного значения в любой из 4 различных переменных, каждая из которых содержит одну и ту же строку в своем имени. Вот упрощенна...

"Завидую тестировщикам: все хотят с ними дружить."
gsub("\\s*-\\s*", " - ", var)
илиgsub("\\b\\s*-\\s*\\b", " - ", var)
Wiktor Stribiżew