web-dev-qa-db-ja.com

列名の文字を置き換えるgsub

私は、タイトルに「販売-数千」のようなものがあり、「販売-数千」としてRに入ってくるCSVの束を読んでいます。これらをクリーンアップするために、正規表現(または他の単純な方法)を使用したいと思います。

これがなぜ機能しないのかわかりません:

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

単語の間にピリオドを1つ残して問題ないことに注意してください。

ありがとうございました。

8
yake84

Rich Scriven 答えがありました:

定義する

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

してから

a <- colClean(a) 

更新する

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

gsub関数を使用して、.#などの別の特殊文字に置き換えることができます。

16
Rajnish Kumar