R logo

とある csv データを取り込み……

Data1 <- read.csv("Dataset.csv")

「str()」で確認すると、

数値になっていてほしいところが、文字列で認識されている。

数字が文字列で認識

これはなんでかというと、

例えば Revenue や Expenses の行は、3桁毎に「,」で区切られているが、R はこれを「数値」だとは認識せず、「文字列」として認識している。

また、Revenue や Growth の行は、「$」や「%」という文字が入っているので、「文字列」として認識されている。

 

これらをちゃんと数値として認識させるために、「gsub()」を使って、余計な記号を削除したり置き換えたりする。

gsub()

gsub は、R標準パッケージにある、正規表現のパターンにマッチした文字列を全て置き換える命令文。

正規表現については下記参照 ▼

 

gsub の使い方は ▼

gsub("置換前の文字","置換後の文字",データ)

gsub で「,」を消す

「,」を消したいので、

置換前は「","」、置換後は「""」とすればOK。

Dat$Revenue <- gsub(",","",Data1$Revenue)

同様の方法で Expenses の「,」も消す。

Dat$Expenses <- gsub(",","",Data1$Expenses)

さらに同様の方法で、Expenses の「Dollars」も消す。

置換前は「"Dollars"」、置換後は「""」とすればOK。

Dat$Exprnses <-gsub("Dollars","",Data1$Expenses)

gsub で「$」を消す

Revenue の「$」も消さないといけないけど、この文字はR関数でも使われているので、「文字」だと認識させる必要がある。

文字として認識させる方法は、直前に「\\」をおく。

置換前は「"\\$"」、置換後は「""」とすればOK。

Dat$Revenue <- gsub("\\$","",Data1$Revenue)

同様の方法で Growth の「%」も消す。

Dat$Growth <- gsub("\\%","",Data1$Growth)

str を確認

以上の作業後にもう一度「str()」で確認すると、

Gsub5

「,」「Dollars」「$」「%」が消えている。

この段階では要素は「Chr:文字列」になっているが、これを「num:数値」に変換する。

Dat$Growth <- as.numeric(Data1$Growth)
Dat$Revenue <- as.numeric(Data1$Revenue)
Dat$Expenses <- as.numeric(Data1$Expenses)

数値への変換については下記参照 ▼

もう一度「str()」で確認すると、

Gsub6

無事数値に変換できた。

sub()

sub()

は、

gsub()

と同じように正規表現に適合した文字列を置換するけど、「1回目に適合した文字列のみを置換する」という点が

gsub()

と異なる。

例えば、

# Dat
Dat <- c("Apple-Red-Round", "Bananna-Yellow-Long", "Cherry-Magenta-Small")

というベクターファイルを作り、

output
[1] "Apple-Red-Round" "Bananna-Yellow-Long" "Cherry-Magenta-Small"

 

これに

sub()

で 「-」 → 「,」の置換を指定すると、

sub("-", ",", Dat)

それぞれの項目の最初の 「-」のみが 「,」に置換される。

output
[1] "Apple,Red-Round" "Bananna,Yellow-Long" "Cherry,Magenta-Small"

 

gsub()

で 「-」 → 「,」への置換を指定すると、

gsub("-", ",", Dat)

全ての 「-」が 「,」に置換される。

output
[1] "Apple,Red,Round" "Bananna,Yellow,Long" "Cherry,Magenta,Small"

stringr::str_replacement

上記R標準パッケージでもいいけど、文字列操作は Hadley氏作製の stringr パッケージで。

stringr の特徴
  • 処理速度が速い。
  • 関数が全て "str_" で始まる。
  • パイプ(%>%)で連鎖しやすい。
  • R標準にはない機能も色々追加されている。
sub()

gsub()

に対応する stringr のコードは、

  • base::sub -> stringr::str_replace
  • base::gsub -> stringr::str_replace_all

使い方は、

# subと同義
str_replace(文字列 (string), 変更前 (pattern), 変更後 (replacement))

# gsubと同義
str_replace(文字列 (string), 変更前 (pattern), 変更後 (replacement))

のように使用する。

 

例えば、上記例で

stringr::str_replace

を使うと、

# 最初にヒットした単語のみ置換
str_replace(Test,"-",",")
output
[1] "Apple,Red-Round" "Bananna,Yellow-Long" "Cherry,Magenta-Small"

で、

stringr::str_replace_all

を使うと、

# 該当する全単語を置換
str_replace_all(Test,"-",",")
output
[1] "Apple,Red,Round" "Bananna,Yellow,Long" "Cherry,Magenta,Small"

という結果が返ってくる。

References

Udemy-English

にほんブログ村 子育てブログ ワーキングマザー育児へ