Условная множественная замена шаблона с помощью gsub в R - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь заменить несколько шаблонов на gsub и grep в R.

То, что у меня есть, это шаблон из одной и двух цифр, то есть

 [1] 30 20 15 15 10 10 5  5  3  3  15 15 7  3  3  5  5  3  3  30 30 20 20 15 
Levels: 3 5 7 10 15 20 30

Я хотел бы добавить «Y» для каждого из них, чтобы иметь следующий вывод:

 [1] 30Y 20Y 15Y 15Y 10Y 10Y 5Y  5Y  3Y  3Y  15Y 15Y 7Y  3Y  3Y  5Y  5Y  3Y  3Y  30Y
Levels: 3Y 5Y 7Y 10Y 15Y 20Y 30Y

Я пытаюсь изменить его как для однозначных, так и для двузначных чисел.

Вот то, что я пробовал до сих пор.

tbl %>% 
  mutate(col1 = gsub("([0-9])([0-9])","\\1\\2Y",col1)) %>%
  mutate(col1 = gsub(!grep("[0-9][A-Z]",col1),"\\1Y",col1)) 

Мой текущий выходной сигнал

 [1] 30Y 20Y 15Y 15Y 10Y 10Y 5  5  3  3 15Y 15Y 7  3  3  5  5  3  3  30Y
Levels: 3 5 7 10Y 15Y 20Y 30Y

Как лучше всего решить эту проблему?

Жду ваших мыслей!

Спасибо

Ответы [ 2 ]

3 голосов
/ 13 мая 2019

Почему бы просто не использовать paste здесь:

tbl$col1 <- paste0(tbl$col1, "Y")

Обратите внимание, что приведенное выше преобразовало бы col1 в символ, который может быть или не быть приемлемым для вас. Кроме того, я мог бы даже рекомендовать , а не сделать это преобразование col1. Скорее, просто сохраните исходные числовые данные как есть, а затем используйте paste, если хотите просмотреть эти данные определенным образом.

Мы также могли бы использовать sub здесь:

tbl$col1 <- sub("$", "Y", tbl$col1)
0 голосов
/ 13 мая 2019

Если вы настаиваете на использовании gsub, вы можете сделать следующее:

 gsub("(\\d+)", "\\1Y", col1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...