重命名不包含特定后缀的列

时间:2018-11-23 12:21:56

标签: r grepl

我想重命名数据框“ SOURCE_SUBSET”中的列,但不包含带有后缀“ _dich”的子字符串“ _dich”,而所有其他列都具有原始名称。

例如: 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 :(得分:2)

您可以使用

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

请参见R demo onlineregex demo

^(?!.*_dich)(.*)模式匹配不包含_dich的字符串。确保使用perl=TRUE,因为默认TRE库不支持先行。那些不匹配的名称将保持不变。

模式详细信息

  • ^-字符串的开头
  • (?!.*_dich)-从字符串开头起,除行换行符以外的任意0+个字符后,不得再使用_dich
  • (.*)-尽可能进入第1组(使用替换模式中的'\\1',将文本插入到结果中)除换行符以外的任意0+字符。

答案 1 :(得分:1)

tidyverse方法

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") ) )