LoginSignup
0
1

More than 1 year has passed since last update.

R言語でデータフレームの全角半角変換、記号削除、大文字小文字変換など ※「chartr」追加

Last updated at Posted at 2022-08-05

全角→半角変換(準備)

サンプルとして文字やアルファベット、記号を含むデータフレームを用意しました。

library(tidyverse)
setwd("/Users/name/DATAS/")
data_01 <- read.csv("test_200208.csv", header = T)  
data_01
  id           text01       text02
1  1        あいうえお   かきくけこ
2  2       アイウエオ   カキクケコ
3  3       ABCDE   FGHIJ
4  4       abcde   fghij
5  5  記号! " # $記号 記 , - . /号

わかりにくいかもしれませんが、アルファベットは全角です
データの型を確認します。

class(data_01)
[1] "data.frame"
str(data_01)
'data.frame':	5 obs. of  3 variables:
 $ id    : int  1 2 3 4 5
 $ text01: chr  "あいうえお" "アイウエオ" "ABCDE" "abcde" ...
 $ text02: chr  "かきくけこ" "カキクケコ" "FGHIJ" "fghij" ...

全角→半角変換(stri_trans_general:実行)

「stringi」パッケージの「stri_trans_general」関数を使ってみます。

library(stringi)
data_02 <- data_01 %>%
 mutate(
    text01_b = stri_trans_general(text01 , "Fullwidth-Halfwidth"),
    text02_b = stri_trans_general(text02 , "Fullwidth-Halfwidth")
  )

data_02
  id           text01       text02         text01_b     text02_b
1  1       あいうえお   かきくけこ       あいうえお   かきくけこ
2  2       アイウエオ   カキクケコ            アイウエオ        カキクケコ
3  3       ABCDE   FGHIJ            ABCDE        FGHIJ
4  4       abcde   fghij            abcde        fghij
5  5  記号! " # $記号 記 , - . /号  記号! " # $記号 記 , - . /号

アルファベットとカタカナが半角になります。

(参考)

全角→半角変換(halfwidthr:準備)

「halfwidthr」というパッケージも試してみました。
インストールするためには、「devtools」パッケージが必要です。

install.packages("devtools")
trying URL 'https://mirror.las.iastate.edu/CRAN/bin/macosx/big-sur-arm64/contrib/4.1/devtools_2.4.4.tgz'
Content type 'application/x-gzip' length 422640 bytes (412 KB)
==================================================
downloaded 412 KB

うまくインストールできていないので、上記メッセージの「trying URL」でtgzファイルをダンロードし、tgzを直接指定してインストールします。

download.file(
  "https://mirror.las.iastate.edu/CRAN/bin/macosx/big-sur-arm64/contrib/4.1/devtools_2.4.4.tgz", 
  "devtools"
)
install.packages("devtools", repos = NULL, type = "source")
library(devtools)

「halfwidthr」をインストールします。

install_github("yutannihilation/halfwidthr")
library(halfwidthr)

(参考)

全角→半角変換(halfwidthr:実行)

「halfwidthr」では、カタカナは全角のままです。

data_02_2 <- data_01 %>%
    mutate(
        text01_c = halfwidthen(text01),
        text02_c = halfwidthen(text02)
    )

data_02_2
  id           text01       text02         text01_c     text02_c
1  1       あいうえお   かきくけこ       あいうえお   かきくけこ
2  2       アイウエオ   カキクケコ       アイウエオ   カキクケコ
3  3       ABCDE   FGHIJ            ABCDE        FGHIJ
4  4       abcde   fghij            abcde        fghij
5  5  記号! " # $記号 記 , - . /号  記号! " # $記号 記 , - . /号

記号削除・置換(gsub)

形態素解析をかける場合は、記号置換は削除しています。
R標準の「gsub」を「lapply」を使ってデータフレームに適用することで削除します。
lapply」は第1引数にデータ(オブジェクト)、第2引数に関数を指定でき、返り値はリストです。

data_03 <- data_02_2
data_03[,4:5] <- 
    lapply(data_03[,3:4] , gsub,, pattern="\\W", replacement = "")

data_03
  id           text01       text02   text01_c   text02_c
1  1       あいうえお   かきくけこ かきくけこ あいうえお
2  2       アイウエオ   カキクケコ カキクケコ アイウエオ
3  3       ABCDE   FGHIJ FGHIJ      ABCDE
4  4       abcde   fghij fghij      abcde
5  5  記号! " # $記号 記 , - . /号       記号   記号記号

data_03[5,4:5]
  text01_c text02_c
5     記号 記号記号

記号が削除され、 「mutate」で作成した「text01_c」 「text02_c」列にそれぞれ「記号」「記号記号」が入っています。

(参考)

記号削除・置換(str_replace_all)

「stringr」パッケージの「str_replace_all」関数を使ってみます。

data_03_b <- data_02_2
data_03_c <- 
    data_03_b %>% 
    mutate(text01_c = (str_replace_all(text01_c, pattern="\\W", replacement="")),
           text02_c = (str_replace_all(text02_c, pattern="\\W", replacement=""))
)

data_03_c
  id           text01       text02   text01_c   text02_c
1  1       あいうえお   かきくけこ あいうえお かきくけこ
2  2       アイウエオ   カキクケコ アイウエオ カキクケコ
3  3       ABCDE   FGHIJ      ABCDE      FGHIJ
4  4       abcde   fghij      abcde      fghij
5  5  記号! " # $記号 記 , - . /号   記号記号       記号

data_03_c[5,4:5]
  text01_c text02_c
5 記号記号     記号

(参考)

大文字小文字変換(str_to_lower)

アルファベットを大文字、小文字に返還する場合は、「stringr」パッケージの「str_to_lower」関数を使います。
大文字にする場合は「str_to_upper]を使用します。

data_04 <- data_02_2
data_04_b <- 
    data_04 %>% 
    mutate(text01_c = str_to_lower(text01_c),
           text02_c = str_to_lower(text02_c)
)

(参考)

複数ファイル読み込み(list.files)

上記などの処理をする前に、データが複数ファイルに分かれている場合、まとめてインポートすることがあります。
データは同じフォーマット(列数と名称が一致)にし、同じディレクトリに集めます。
パスを読み込み、そのパスを「read_csv」に適用しています。

library(readr)
texts_path <- list.files(path = "/Users/user/ファイルが入っているディレクトリ/", pattern = "*.csv", full.names = T)

head(texts_path)
[1] "/Users/user/ファイルが入っているディレクトリ//aaa.csv"                   
[2] "/Users/user/ファイルが入っているディレクトリ//bbb.csv"             
[3] "/Users/user/ファイルが入っているディレクトリ//ccc.csv"    
#(略) 

# 「sapply」:引き数でデータ(オブジェクト)と関数を渡すと、データの各要素ごとに関数を適用
# col_types = cols(.default = "c") ですべての列を文字列型に
texts <- sapply(texts_path, read_csv, simplify=FALSE,  col_types = cols(.default = "c")) 

「chartr」で全角半角変換

コメントで教えてもらった「chartr」を使用したので追記します。

chartr(z, y, x)
文字列xを対象に、「zyに置換

chartr("A", "a", "ABC")
[1] "aBC"

関数を設定し、「sapply」で変換を実行します。

data_01
  id           text01       text02
1  1       あいうえお   かきくけこ
2  2       アイウエオ   カキクケコ
3  3       ABCDE   FGHIJ
4  4       abcde   fghij
5  5  記号! " # $記号 記 , - . /号

#関数
data_chartr <- function(x) {
  y <- chartr("[-Za-z0-]",  "[A-Za-z0-9]", x)
  return(y) 
}

#sapplyでデータフレームに適用
data_ch1 <- sapply(data_01, data_chartr) %>% as.data.frame()

data_ch1
  id           text01       text02
1  1       あいうえお   かきくけこ
2  2       アイウエオ   カキクケコ
3  3            ABCDE        FGHIJ
4  4            abcde        fghij
5  5  記号! " # $記号 記 , - . /号

#sapplyと合わせて関数を設定する方法
data_chtr_1 <- sapply(data_01, function(x) {chartr("[A-Za-z0-9]",  "[A-Za-z0-9]", x)}) %>% as.data.frame()

data_chtr_1 
  id           text01       text02
1  1       あいうえお   かきくけこ
2  2       アイウエオ   カキクケコ
3  3            ABCDE        FGHIJ
4  4            abcde        fghij
5  5  記号! " # $記号 記 , - . /号

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1