Rで解析:同じ文字列の出現順に番号を付けて一意にする「makeunique」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

同じ文字列の出現順に番号を付けて一意にするパッケージの紹介です。文字列を処理する場合に便利なパッケージだと思います。

パッケージバージョンは1.0.0。実行コマンドはwindows 11のR version 4.4.1で確認しています。

スポンサーリンク

パッケージのインストール

下記、コマンドを実行してください。

# パッケージのインストール
install.packages("makeunique")

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

# パッケージの読み込み
library("makeunique")

### データ例の作成 #####
# 乱数の設定
set.seed(1234)
n <- 20

# 作成
TestData <- sample(c("KARAD", "からだに", "いいもの", "GOOD",
                     "同じ文字列", "出現順に番号を付ける", "$", "~"), n, replace = TRUE)

# 確認
TestData
# [1] "GOOD"                 "~"                    "からだに"            
# [4] "出現順に番号を付ける" "同じ文字列"             "GOOD"                
# [7] "$"                    "KARAD"                "同じ文字列"            
# [10] "出現順に番号を付ける" "~"                    "GOOD"                
# [13] "からだに"             "$"                    "出現順に番号を付ける"
# [16] "からだに"             "出現順に番号を付ける" "$"                   
# [19] "出現順に番号を付ける" "GOOD" 
########

# 同じ文字列の出現順に番号を付けて一意にする:make_uniqueコマンド
# 文字列を指定:xオプション
# 文字列と番号の分割文字:sepオプション
# 番号をカッコで囲むかの設定:wrap_in_bracketsオプション;TRUE/FALSE
# 指定データが数字の場合に文字列に変換のエラー表示設定:warn_about_type_conversionオプション;TRUE/FALSE
make_unique(TestData, sep = "_", wrap_in_brackets = FALSE, 
            warn_about_type_conversion = TRUE)
# [1] "GOOD_1"                 "~_1"                    "からだに_1"            
# [4] "出現順に番号を付ける_1" "同じ文字列_1"           "GOOD_2"                
# [7] "$_1"                    "KARAD"                  "同じ文字列_2"          
# [10] "出現順に番号を付ける_2" "~_2"                    "GOOD_3"                
# [13] "からだに_2"             "$_2"                    "出現順に番号を付ける_3"
# [16] "からだに_3"             "出現順に番号を付ける_4" "$_3"                   
# [19] "出現順に番号を付ける_5" "GOOD_4"     


### 例えばこんな使い方 #####
# tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}

# 作業
TestData |>
  # 番号付け
  make_unique(sep = "_", wrap_in_brackets = FALSE, 
              warn_about_type_conversion = TRUE) |>
  # tibble化
  as_tibble() %>%
  # "_"で分割
  separate(value, c("Character", "Number"), "_") |>
  # NumberのNAを0にして数値化
  mutate(Number = replace_na(Number, "0"),
         Number = as.numeric(Number)) |>
  # Character昇順,Numbaer降順で並び替え
  arrange(Character, desc(Number))

# separate(value, c("Character", "Number"), "_")処理警告が表示されるが問題なし
# A tibble: 20 × 2
#   Character             Number
#   <chr>                  <dbl>
#  1 $                         3
#  2 $                         2
#  3 $                         1
#  4 GOOD                      4
#  5 GOOD                      3
#  6 GOOD                      2
#  7 GOOD                      1
#  8 KARAD                     0
#  9 ~                         2
# 10 ~                         1
# 11 からだに                  3
# 12 からだに                  2
# 13 からだに                  1
# 14 出現順に番号を付ける      5
# 15 出現順に番号を付ける      4
# 16 出現順に番号を付ける      3
# 17 出現順に番号を付ける      2
# 18 出現順に番号を付ける      1
# 19 同じ文字列                2
# 20 同じ文字列                1
# 警告メッセージ:
# Expected 2 pieces. Missing pieces filled with `NA` in 1 rows [8]. 
########

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました