Rで解析:コマンド操作を省略「tidyfst」パッケージ


「dplyr」パッケージのコマンドを省略して実行できるパッケージの紹介です。少しでもコードを省略したい方におすすめです。pivot_longerコマンド、pivot_widerコマンド、mutateコマンド、transmuteコマンド、データのネストなどを省略したコマンドが収録されています。

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

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

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

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

実行コマンド

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

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

###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
set.seed(1234)
n <- 30
TestData <- tibble(Group = sample(paste0("Group", 1:4), n,
                                  replace = TRUE),
                   X_num_Data = sample(c(1:50, NA), n, replace = TRUE),
                   Y_num_Data = sample(c(51:100), n, replace = TRUE),
                   Chr_Data = sample(c("か", "ら", "だ", "に",
                                       "い", "い", "も", "の"),
                                     n, replace = TRUE),
                   Fct_Data = factor(sample(c("か", "ら", "だ", "に",
                                              "い", "い", "も", "の"),
                                            n, replace = TRUE)))
########

#pivot_longerコマンドの省略:longer_dtコマンド
longer_dt(TestData, "Group", "Chr_Data", "Fct_Data",
          name = "Name", value = "Data") -> LongData
LongData
#    Group Chr_Data Fct_Data       Name  Data
#   <char>   <char>   <fctr>     <fctr> <int>
#1: Group4       に       の X_num_Data     3
#2: Group4       の       だ X_num_Data    36
#3: Group2       の       に X_num_Data    31
#4: Group2       に       に X_num_Data    29
#5: Group1       か       だ X_num_Data     5
#以下省略 

#pivot_widerコマンドの省略:wider_dtコマンド
wider_dt(LongData, name = "Name", value = "Data")
#Key: <Group, Chr_Data, Fct_Data>
#  Group Chr_Data Fct_Data X_num_Data Y_num_Data
#<char>   <char>   <fctr>      <int>      <int>
#1: Group1       い       い          1          1
#2: Group1       か       だ          1          1
#3: Group1       だ       ら          1          1
#4: Group1       に       い          1          1
#5: Group2       い       い          4          4
#以下省略 

#データ抽出:filter_dtコマンド
filter_dt(TestData, Chr_Data == "か" | X_num_Data == 3)
#    Group X_num_Data Y_num_Data Chr_Data Fct_Data
#   <char>      <int>      <int>   <char>   <fctr>
#1: Group4          3         58       に       の
#2: Group1          5         92       か       だ
#3: Group2         48         91       か       い
#4: Group4          3         53       い       か
#5: Group2         NA         72       か       か
#6: Group2         38         70       か       ら
   
#データの降順,昇順:arrange_dtコマンド
#降順は「-」を指定列名に付与;例:-Chr_Data
arrange_dt(TestData, Chr_Data)
#    Group X_num_Data Y_num_Data Chr_Data Fct_Data
#   <char>      <int>      <int>   <char>   <fctr>
#1: Group4         44         66       い       い
#2: Group4          3         53       い       か
#3: Group2         36         95       い       い
#4: Group2          8         75       い       い
#5: Group2         42         69       い       い
#以下省略 

#列の選択:select_dtコマンド
#Chr_Data以外を選択
select_dt(TestData, -Chr_Data) 
#    Group X_num_Data Y_num_Data Fct_Data
#   <char>      <int>      <int>   <fctr>
#1: Group4          3         58       の
#2: Group4         36         76       だ
#3: Group2         31         67       に
#4: Group2         29         58       に
#5: Group1          5         92       だ
#以下省略 

###例えば列名を変更する
#rename_dt(Change_Name = Y_num_Data)は列を抽出しない
select_dt(TestData, Change_Name = Y_num_Data) 
# Change_Name
#   <int>
#1:    58
#2:    76
#3:    67
#4:    58
#5:    92
#以下省略 

#mutateコマンドを省略:mutate_dtコマンド
mutate_dt(TestData,
          Num_Sum = X_num_Data + Y_num_Data,
          Char_Bind = paste0(Chr_Data, "_", Fct_Data))
#Group X_num_Data Y_num_Data Chr_Data Fct_Data Num_Sum Char_Bind
#<char>      <int>      <int>   <char>   <fctr>   <int>    <char>
#1: Group4          3         58       に       の      61     に_の
#2: Group4         36         76       の       だ     112     の_だ
#3: Group2         31         67       の       に      98     の_に
#4: Group2         29         58       に       に      87     に_に
#5: Group1          5         92       か       だ      97     か_だ
#以下省略

#transmuteコマンドを省略:transmute_dtコマンド
transmute_dt(TestData,
             Num_Sum = X_num_Data + Y_num_Data,
             Char_Bind = paste0(Chr_Data, "_", Fct_Data))
#   Num_Sum Char_Bind
#     <int>    <char>
#1:      61     に_の
#2:     112     の_だ
#3:      98     の_に
#4:      87     に_に
#5:      97     か_だ
#以下省略

#summariseコマンドを省略:summarise_dtコマンド
summarise_dt(TestData,
             Mean = mean(X_num_Data, na.rm = TRUE), by = Group)
#    Group     Mean
#   <char>    <num>
#1: Group4 26.90909
#2: Group2 27.20000
#3: Group1 28.50000
#4: Group3 40.00000

#データ型でsummariseコマンドを適応:summarise_varsコマンド
#byオプション使用時は対象グループが同数であること
summarise_vars(TestData, .cols = is.numeric,
               .func = list(mean, sd, median),
               na.rm = TRUE)
#   X_num_Data Y_num_Data fun_name
#   <num>      <num>   <char>
#1:   28.64286   73.93333     mean
#2:   16.78450   13.99244       sd
#3:   32.00000   72.50000   median

#データからサンプリング:sample_dtコマンド
#サンプリングする個数:nオプション
#サンプリングする割合:propオプション;0:1
#サンプリングの重複を許可:replaceオプション
#グループ毎にサンプリング:byオプション
sample_dt(TestData, prop = .05,
          replace = FALSE, by = NULL)
#    Group X_num_Data Y_num_Data Chr_Data Fct_Data
#   <char>      <int>      <int>   <char>   <fctr>
#1: Group4         42         69       い       い

#データからN個サンプリング:sample_n_dtコマンド
#オプションはsample_dtコマンドと共通
sample_n_dt(TestData, size = 1,
            by = "Group")
#    Group X_num_Data Y_num_Data Chr_Data Fct_Data
#   <char>      <int>      <int>   <char>   <fctr>
#1: Group4         49         56       い       の
#2: Group2         NA         72       か       か
#3: Group1         40         72       に       い
#4: Group3         41         60       に       だ

#データからN割合サンプリング:sample_frac_dtコマンド
#オプションはsample_dtコマンドと共通
sample_frac_dt(TestData, size = .05,
               by = "Group")
#    Group X_num_Data Y_num_Data Chr_Data Fct_Data
#   <char>      <int>      <int>   <char>   <fctr>
#1: Group4         49         82       い       い
#2: Group2         23         72       か       か
#3: Group1         20         66       い       い
#4: Group3         47         85       だ       ら

#データのネスト:nest_dtコマンド
nest_dt(TestData, Group) -> NestData
NestData
#  Group                ndt
#  <char>             <list>
#  1: Group4 <data.table[12x4]>
#  2: Group2 <data.table[11x4]>
#  3: Group1  <data.table[4x4]>
#  4: Group3  <data.table[3x4]>

#データのネスト解除:unnest_dtコマンド
unnest_dt(NestData, ndt)
# Group X_num_Data Y_num_Data Chr_Data Fct_Data
#<char>      <int>      <int>   <char>   <fctr>
#1: Group4          3         58       に       の
#2: Group4         36         76       の       だ
#3: Group4          2         82       に       ら
#4: Group4         44         66       い       い
#5: Group4          3         53       い       か
#以下省略

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

スポンサードリンク

スポンサードリンク