替换列名 gsub 中的字符

Replace characters in column names gsub

我正在阅读一堆标题中包含 "sales - thousands" 之类内容的 CSV,并以 "sales...thousands" 的形式进入 R。我想使用正则表达式(或其他简单方法)来清理它们。

我不明白为什么这不起作用:

#mock data
  a <- data.frame(this.is.fine = letters[1:5],
                  this...one...isnt = LETTERS[1:5])

#column names
  colnames(a)
  # [1] "this.is.fine"  "this...one...isnt"

#function to remove multiple spaces
  colClean <- function(x){
    colnames(x) <- gsub("\.\.+", ".", colnames(x))
  }

#run function
  colClean(a)

#names go unaffected
  colnames(a)
  # [1] "this.is.fine"  "this...one...isnt"

但这段代码确实如此:

#direct change to names
  colnames(a) <- gsub("\.\.+", ".", colnames(a))

#new names
  colnames(a)
  # [1] "this.is.fine"  "this.one.isnt"

请注意,发生这种情况时,我可以在单词之间留一个句点。

谢谢。

Rich Scriven 有答案:

定义

colClean <- function(x){ colnames(x) <- gsub("\.\.+", ".", colnames(x)); x } 

然后

a <- colClean(a) 

更新一个

names(a) <- gsub(x = names(a), pattern = "\.", replacement = "#")  

您可以使用 gsub 函数将 . 替换为另一个特殊字符,例如 #