替换列名 gsub 中的字符
Posted
技术标签:
【中文标题】替换列名 gsub 中的字符【英文标题】:Replace characters in column names gsub 【发布时间】:2017-02-01 21:54:50 【问题描述】:我正在阅读一堆标题中包含“销售额 - 数千”之类的 CSV,并在 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"
请注意,如果发生这种情况,我可以在单词之间留一个句点。
谢谢。
【问题讨论】:
替换发生在本地,函数内部,而不是全局。如果你在函数的最后一行return(x)
,你会得到更新的数据框。
感谢您的快速回复!您可以键入需要编写的函数吗?我尝试将return(x)
放入代码中,但没有得到我期望的结果。我可以让它打印出列名或打印出带有新列名的数据框,但是这两种尝试都没有真正改变全局环境中的数据框。
您还需要使用更新的数据框来覆盖现有的数据框,或者分配给新的变量。即使你做了return(x)
,原始数据框也不会被函数本身改变。
定义colClean <- function(x) colnames(x) <- gsub("\\.\\.+", ".", colnames(x)); x
然后执行a <- colClean(a)
更新a
d'oh,作业的最后一步!显然是漫长一周的结果。感谢您的帮助。
【参考方案1】:
Rich Scriven 得到了答案:
定义
colClean <- function(x) colnames(x) <- gsub("\\.\\.+", ".", colnames(x)); x
然后做
a <- colClean(a)
更新一个
【讨论】:
【参考方案2】:names(a) <- gsub(x = names(a), pattern = "\\.", replacement = "#")
您可以使用gsub
函数将.
替换为另一个特殊字符,例如#
。
【讨论】:
我不得不用 'colnames' 替换 'names' 或使用 'fixed=T' 来不替换整个列名。以上是关于替换列名 gsub 中的字符的主要内容,如果未能解决你的问题,请参考以下文章