Добавьте номер в строку после каждой буквы - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть несколько строк с фиксированным форматом.

Формат представляет собой одну букву, за которой следует число, например, A3B1C7D1.

Однако, если число за буквой равно 1,строка записывается как A3BC7D.

Что я хочу сделать, это вставить номер 1 и преобразовать строку из A3BC7D в A3B1C7D1.

Мой пример данных

strings <- c("A", "A3BC3", "A2B1C")

Что я хочу получить:

strings_new <- c("A1", "A3B1C3", "A2B1C1")

Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Другой вариант:

gsub("([A-Za-z])(?=[A-Za-z])|([A-Za-z])$", "\\1\\21", strings, perl = T)

Вывод:

[1] "A1"     "A3B1C3" "A2B1C1"

Или, если у вас только прописные буквы, просто:

gsub("([A-Z])(?=[A-Z])|([A-Z])$", "\\1\\21", strings, perl = T)

В основном это находит буквы, которыелибо сопровождается другой буквой, либо находится в конце строки и заменяет их собой, в то же время добавляя нужное число, 1 в данном случае.

0 голосов
/ 22 февраля 2019

Найдите все (заглавные) буквы ([A-Z]), за которыми не следует число, и замените их на эту строку + 1:

gsub("([A-Z])(?![0-9])", "\\11", strings, perl = TRUE)
# [1] "A1"     "A3B1C3" "A2B1C1"
0 голосов
/ 22 февраля 2019
strings[!grepl("[0-9]$",strings)]=paste0(strings[!grepl("[0-9]$",strings)],"1")
[1] "A1"     "A3BC3"  "A2B1C1"

Сначала grep все позиции, которые не заканчиваются цифрой, и вставляем в них 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...