Переименование столбцов, не содержащих определенный суффикс - PullRequest
0 голосов
/ 23 ноября 2018

Я хочу переименовать столбцы в фрейме данных 'SOURCE_SUBSET', чтобы они не содержали подстроку "_dich" с суффиксом "_dich", а все другие столбцы должны иметь исходное имя.

exmaple: GGADA202_dich должен оставаться прежним GGADA203должен стать GGADA203_dich

Это то, что я до сих пор.Это не работает правильно: GGADA202_dich становится GGADA202_dich_dich_dich

ifelse(grepl("_dich", colnames(SOURCE_SUBSET), fixed=TRUE),
       colnames(SOURCE_SUBSET) <- paste(colnames(SOURCE_SUBSET), "dich", sep = "_"),colnames(SOURCE_SUBSET))

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Тидиверс подход

library( tidyverse )
#if a column name does not contain the string"_dich", add the suffix "_dich"
df %>% rename_at( vars( -contains( "_dich" ) ), funs( paste0(., "_dich") ) )
0 голосов
/ 23 ноября 2018

Вы можете использовать

colnames(SOURCE_SUBSET) <- sub("^(?!.*_dich)(.*)", "\\1_dich", colnames(SOURCE_SUBSET), perl=TRUE)

См. Демонстрацию R онлайн и демонстрацию regex .

Шаблон ^(?!.*_dich)(.*) соответствует строкамкоторые не содержат _dich.Убедитесь, что вы используете perl=TRUE, так как просмотр не поддерживается библиотекой TRE по умолчанию.Те имена, которые не совпадают, останутся как есть.

Детали шаблона

  • ^ - начало строки
  • (?!.*_dich) - без _dich не допускается после любого 0+символы, отличные от символов разрыва строки, как можно больше с начала строки
  • (.*) - захватывает группу 1 (этот текст вставляется обратно в результат с использованием '\\1' в шаблоне замены) любой 0+ символов, отличных от символов разрыва строки, как можно больше.
...