Rで解析:データの書式変更が楽々です!!「fmtr」パッケージ

Rの解析に役に立つ記事

数字の桁揃えや小数点の切り上げ・切り捨て、テキストの置換に大変便利なパッケージの紹介です。書式設定が簡単で作成した書式設定も再利用が可能です。

パッケージバージョンは1.5.5。windows11のR version 4.1.2で確認しています。

スポンサーリンク
スポンサーリンク

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

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

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

実行コマンド

「実行準備」、「ベクトルのフォーマット(桁区切りや小数点)を整える」、「データフレームのフォーマット(桁区切りや小数点)を整える」、「再利用可能なフォーマット形式を作成」に分けて使用頻度が高そうな書式設定を意識して実行コマンドを記述しました。詳細はコメント、コマンドヘルプを確認してください。

実行準備

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

###データ例の作成#####
#tidyverseパッケージを読み込み
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
#乱数の固定
set.seed(1980)
#データ例の作成
n <- 10
TestData <- tibble(Group = sample(paste0("Group", 1:5),
                                  n, replace = TRUE),
                   Data1 = rnorm(n),
                   Data2 = sample(900:1500,
                                  n, replace = TRUE)) 
#確認
TestData
# A tibble: 10 x 3
Group   Data1 Data2
<chr>   <dbl> <int>
1 Group5  0.519  1004
2 Group2  0.684  1166
3 Group2  0.355  1019
4 Group1 -0.575  1271
5 Group1 -1.87    939
6 Group4 -0.680  1031
7 Group3  0.412  1394
8 Group3 -2.25   1462
9 Group4 -0.878  1112
10 Group4  1.36   1198
########

ベクトルのフォーマット(桁区切りや小数点)を整える

#ベクトルのフォーマットを整える:fapplyコマンド
#フォーマット(桁区切りや小数点):formatオプション
#文字列の幅を指定:widthオプション
#文字寄せを指定:justifyオプション;"left","right","center","centre","none"

#少数点1桁で四捨五入:"%.(少数点桁数)f"
fapply(TestData$Data1, format = "%.1f")
[1] "0.5"  "0.7"  "0.4"  "-0.6" "-1.9" "-0.7" "0.4"  "-2.2" "-0.9" "1.4" 

#少数点1桁で四捨五入して%を末尾に付与:"%.(少数点桁数)f"
fapply(TestData$Data1, format = "%.1f%%")
[1] "0.5%"  "0.7%"  "0.4%"  "-0.6%" "-1.9%" "-0.7%" "0.4%"  "-2.2%" "-0.9%"
[10] "1.4%"  

#少数点1桁で四捨五入:format,width,justifyオプションを適用
fapply(TestData$Data1, format = "%.1f", width = 6, justify = "right")
[1] "   0.5" "   0.7" "   0.4" "  -0.6" "  -1.9" "  -0.7" "   0.4" "  -2.2"
[9] "  -0.9" "   1.4"

#少数点4桁で四捨五入
fapply(TestData$Data1, "%.4f")
[1] "0.5186"  "0.6841"  "0.3553"  "-0.5753" "-1.8687" "-0.6800" "0.4116" 
[8] "-2.2457" "-0.8785" "1.3646" 

#桁区切りを適用
fapply(TestData$Data2, function(x) format(x, big.mark = ","))
[1] "1,004" "1,166" "1,019" "1,271" "  939" "1,031" "1,394" "1,462" "1,112" "1,198"

###こんな使い方もできます#####
#テキストの置換
#fmtrパッケージのvalueコマンド,conditionコマンドを組み合わせて使用

#例1
ChangeText <- value(condition(x == "Group1", "G1"),
                    condition(x == "Group2" | x == "Group3", "G6"),
                    condition(x == "Group4" | x == "Group5", "G7"))
fapply(TestData$Group, ChangeText)
[1] "G7" "G6" "G6" "G1" "G1" "G7" "G6" "G6" "G7" "G7"

#例2
ChangeValue <- value(condition(x <= -0.3, "LOW"),
                     condition(x > -0.3 | x <= 0.5, "Middle"),
                     condition(x > 0.5, "High"))
fapply(TestData$Data1, ChangeValue)
[1] "Middle" "Middle" "Middle" "LOW"    "LOW"    "LOW"    "Middle" "LOW"   
[9] "LOW"    "Middle"
########

データフレームのフォーマット(桁区切りや小数点)を整える

#フォーマット形式を設定:formatsコマンド
#list形式もしくはfcatコマンドで設定します
#Data2に桁区切りを適用
formats(TestData) <- list(Group = value(condition(x == "Group1", "G1"),
                                        condition(x == "Group2" | x == "Group3", "G6"),
                                        condition(x == "Group4" | x == "Group5", "G7")),
                          Data1 = value(condition(x <= -0.3, "LOW"),
                                        condition(x > -0.3 | x <= 0.5, "Middle"),
                                        condition(x > 0.5, "High")),
                          Data2 = function(x) format(x, big.mark = ","))

#formatsコマンドをデータへ適応:fdataコマンド
fdata(TestData)
# A tibble: 10 x 3
Group Data1  Data2  
<chr> <chr>  <chr>  
1 G7    Middle "1,004"
2 G6    Middle "1,166"
3 G6    Middle "1,019"
4 G1    LOW    "1,271"
5 G1    LOW    "  939"
6 G7    LOW    "1,031"
7 G6    Middle "1,394"
8 G6    LOW    "1,462"
9 G7    LOW    "1,112"
10 G7    Middle "1,198"
10 G7    1.4   "1,198"

再利用可能なフォーマット形式を作成

#fcatコマンド
TestFormats <- fcat(Group = value(condition(x == "G1", "Group1"),
                                  condition(x == "G6", "Group2"),
                                  condition(x == "G7", "Group3")),
                    Data1 = value(condition(x <= -0.3, "LOW"),
                                  condition(x > -0.3 | x <= 0.5, "Middle"),
                                  condition(x > 0.5, "High")),
                    Data2 = function(x) format(x, big.mark = ","))

#例1
fapply(c("G7", "G6", "G6", "G1", "G1", "G7", "G6", "G6", "G7", "G7"),
       TestFormats$Group)
[1] "Group3" "Group2" "Group2" "Group1" "Group1" "Group3" "Group2" "Group2" "Group3" "Group3"

#例2
fapply(c(-0.67, 0.67), TestFormats$Data1)
[1] "LOW"    "Middle"

#例3
formats(TestData) <- TestFormats
fdata(TestData)
# A tibble: 10 x 3
Group  Data1  Data2  
<chr>  <chr>  <chr>  
1 Group5 Middle "1,004"
2 Group2 Middle "1,166"
3 Group2 Middle "1,019"
4 Group1 LOW    "1,271"
5 Group1 LOW    "  939"
6 Group4 LOW    "1,031"
7 Group3 Middle "1,394"
8 Group3 LOW    "1,462"
9 Group4 LOW    "1,112"
10 Group4 Middle "1,198"

#フォーマット形式を保存:write.fcatコマンド
write.fcat(TestFormats)

#フォーマット形式を読み込み:read.fcatコマンド
#ファイルパスを指定:file_pathオプション
read.fcat(file_path)

データの書式設定例の紹介


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

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