R 替换列名称gsub中的字符

R 替换列名称gsub中的字符,r,gsub,R,Gsub,我正在读一堆CSV,它们的标题中有“sales-数千”之类的内容,进入R后称为“sales…数千”。我想使用正则表达式(或其他简单的方法)来清理这些 我不明白为什么这不起作用: #mock data a <- data.frame(this.is.fine = letters[1:5], this...one...isnt = LETTERS[1:5]) #column names colnames(a) # [1] "this.is.fi

我正在读一堆CSV,它们的标题中有“sales-数千”之类的内容,进入R后称为“sales…数千”。我想使用正则表达式(或其他简单的方法)来清理这些

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

#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"
模拟数据 a的答案是:

定义

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

colClean
names(a)替换发生在本地,函数内部,而不是全局。如果您
在函数的最后一行返回(x)
,您将获得更新的数据框。感谢您的快速响应!你能按需要写的那样把函数打出来吗?我尝试将
return(x)
放入代码中,但没有得到预期的结果。我可以让它打印列名或打印具有新列名的数据框,但这两次尝试都没有实际更改全局环境中的数据框。您还需要使用更新的数据框覆盖现有数据框,或将其指定给新变量。即使您执行了
return(x)
,函数本身也不会更改原始数据帧。定义
colClean d'oh,分配的最后一步!显然,这是漫长一周的结果。谢谢你的帮助。我必须用“colnames”重新拼合“names”,或者使用“fixed=T”不重新拼合整个列名。
colClean <- function(x){ colnames(x) <- gsub("\\.\\.+", ".", colnames(x)); x } 
a <- colClean(a) 
names(a) <- gsub(x = names(a), pattern = "\\.", replacement = "#")