我想重命名数据框“ 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))
答案 0 :(得分:2)
您可以使用
colnames(SOURCE_SUBSET) <- sub("^(?!.*_dich)(.*)", "\\1_dich", colnames(SOURCE_SUBSET), perl=TRUE)
^(?!.*_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") ) )