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

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

「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("&#12363;", "&#12425;", "&#12384;", "&#12395;",
                                       "&#12356;", "&#12356;", "&#12418;", "&#12398;"),
                                     n, replace = TRUE),
                   Fct_Data = factor(sample(c("&#12363;", "&#12425;", "&#12384;", "&#12395;",
                                              "&#12356;", "&#12356;", "&#12418;", "&#12398;"),
                                            n, replace = TRUE)))
########

#pivot_longer&#12467;&#12510;&#12531;&#12489;&#12398;&#30465;&#30053;:longer_dt&#12467;&#12510;&#12531;&#12489;
longer_dt(TestData,&#12288;"Group", "Chr_Data", "Fct_Data",
          name = "Name",&#12288;value = "Data") -> LongData
LongData
#    Group Chr_Data Fct_Data       Name  Data
#   <char>   <char>   <fctr>     <fctr> <int>
#1: Group4       &#12395;       &#12398; X_num_Data     3
#2: Group4       &#12398;       &#12384; X_num_Data    36
#3: Group2       &#12398;       &#12395; X_num_Data    31
#4: Group2       &#12395;       &#12395; X_num_Data    29
#5: Group1       &#12363;       &#12384; X_num_Data     5
#&#20197;&#19979;&#30465;&#30053; 

#pivot_wider&#12467;&#12510;&#12531;&#12489;&#12398;&#30465;&#30053;:wider_dt&#12467;&#12510;&#12531;&#12489;
wider_dt(LongData, name = "Name",&#12288;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       &#12356;       &#12356;          1          1
#2: Group1       &#12363;       &#12384;          1          1
#3: Group1       &#12384;       &#12425;          1          1
#4: Group1       &#12395;       &#12356;          1          1
#5: Group2       &#12356;       &#12356;          4          4
#&#20197;&#19979;&#30465;&#30053; 

#&#12487;&#12540;&#12479;&#25277;&#20986;:filter_dt&#12467;&#12510;&#12531;&#12489;
filter_dt(TestData, Chr_Data == "&#12363;" | X_num_Data == 3)
#    Group X_num_Data Y_num_Data Chr_Data Fct_Data
#   <char>      <int>      <int>   <char>   <fctr>
#1: Group4          3         58       &#12395;       &#12398;
#2: Group1          5         92       &#12363;       &#12384;
#3: Group2         48         91       &#12363;       &#12356;
#4: Group4          3         53       &#12356;       &#12363;
#5: Group2         NA         72       &#12363;       &#12363;
#6: Group2         38         70       &#12363;       &#12425;
   
#&#12487;&#12540;&#12479;&#12398;&#38477;&#38918;,&#26119;&#38918;:arrange_dt&#12467;&#12510;&#12531;&#12489;
#&#38477;&#38918;&#12399;&#12300;-&#12301;&#12434;&#25351;&#23450;&#21015;&#21517;&#12395;&#20184;&#19982;;&#20363;:-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       &#12356;       &#12356;
#2: Group4          3         53       &#12356;       &#12363;
#3: Group2         36         95       &#12356;       &#12356;
#4: Group2          8         75       &#12356;       &#12356;
#5: Group2         42         69       &#12356;       &#12356;
#&#20197;&#19979;&#30465;&#30053; 

#&#21015;&#12398;&#36984;&#25246;:select_dt&#12467;&#12510;&#12531;&#12489;
#Chr_Data&#20197;&#22806;&#12434;&#36984;&#25246;
select_dt(TestData, -Chr_Data) 
#    Group X_num_Data Y_num_Data Fct_Data
#   <char>      <int>      <int>   <fctr>
#1: Group4          3         58       &#12398;
#2: Group4         36         76       &#12384;
#3: Group2         31         67       &#12395;
#4: Group2         29         58       &#12395;
#5: Group1          5         92       &#12384;
#&#20197;&#19979;&#30465;&#30053; 

###&#20363;&#12360;&#12400;&#21015;&#21517;&#12434;&#22793;&#26356;&#12377;&#12427;
#rename_dt(Change_Name = Y_num_Data)&#12399;&#21015;&#12434;&#25277;&#20986;&#12375;&#12394;&#12356;
select_dt(TestData, Change_Name = Y_num_Data) 
# Change_Name
#   <int>
#1:    58
#2:    76
#3:    67
#4:    58
#5:    92
#&#20197;&#19979;&#30465;&#30053; 

#mutate&#12467;&#12510;&#12531;&#12489;&#12434;&#30465;&#30053;:mutate_dt&#12467;&#12510;&#12531;&#12489;
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       &#12395;       &#12398;      61     &#12395;_&#12398;
#2: Group4         36         76       &#12398;       &#12384;     112     &#12398;_&#12384;
#3: Group2         31         67       &#12398;       &#12395;      98     &#12398;_&#12395;
#4: Group2         29         58       &#12395;       &#12395;      87     &#12395;_&#12395;
#5: Group1          5         92       &#12363;       &#12384;      97     &#12363;_&#12384;
#&#20197;&#19979;&#30465;&#30053;

#transmute&#12467;&#12510;&#12531;&#12489;&#12434;&#30465;&#30053;:transmute_dt&#12467;&#12510;&#12531;&#12489;
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     &#12395;_&#12398;
#2:     112     &#12398;_&#12384;
#3:      98     &#12398;_&#12395;
#4:      87     &#12395;_&#12395;
#5:      97     &#12363;_&#12384;
#&#20197;&#19979;&#30465;&#30053;

#summarise&#12467;&#12510;&#12531;&#12489;&#12434;&#30465;&#30053;:summarise_dt&#12467;&#12510;&#12531;&#12489;
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

#&#12487;&#12540;&#12479;&#22411;&#12391;summarise&#12467;&#12510;&#12531;&#12489;&#12434;&#36969;&#24540;:summarise_vars&#12467;&#12510;&#12531;&#12489;
#by&#12458;&#12503;&#12471;&#12519;&#12531;&#20351;&#29992;&#26178;&#12399;&#23550;&#35937;&#12464;&#12523;&#12540;&#12503;&#12364;&#21516;&#25968;&#12391;&#12354;&#12427;&#12371;&#12392;
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

#&#12487;&#12540;&#12479;&#12363;&#12425;&#12469;&#12531;&#12503;&#12522;&#12531;&#12464;:sample_dt&#12467;&#12510;&#12531;&#12489;
#&#12469;&#12531;&#12503;&#12522;&#12531;&#12464;&#12377;&#12427;&#20491;&#25968;:n&#12458;&#12503;&#12471;&#12519;&#12531;
#&#12469;&#12531;&#12503;&#12522;&#12531;&#12464;&#12377;&#12427;&#21106;&#21512;:prop&#12458;&#12503;&#12471;&#12519;&#12531;;0:1
#&#12469;&#12531;&#12503;&#12522;&#12531;&#12464;&#12398;&#37325;&#35079;&#12434;&#35377;&#21487;:replace&#12458;&#12503;&#12471;&#12519;&#12531;
#&#12464;&#12523;&#12540;&#12503;&#27598;&#12395;&#12469;&#12531;&#12503;&#12522;&#12531;&#12464;:by&#12458;&#12503;&#12471;&#12519;&#12531;
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       &#12356;       &#12356;

#&#12487;&#12540;&#12479;&#12363;&#12425;N&#20491;&#12469;&#12531;&#12503;&#12522;&#12531;&#12464;:sample_n_dt&#12467;&#12510;&#12531;&#12489;
#&#12458;&#12503;&#12471;&#12519;&#12531;&#12399;sample_dt&#12467;&#12510;&#12531;&#12489;&#12392;&#20849;&#36890;
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       &#12356;       &#12398;
#2: Group2         NA         72       &#12363;       &#12363;
#3: Group1         40         72       &#12395;       &#12356;
#4: Group3         41         60       &#12395;       &#12384;

#&#12487;&#12540;&#12479;&#12363;&#12425;N&#21106;&#21512;&#12469;&#12531;&#12503;&#12522;&#12531;&#12464;:sample_frac_dt&#12467;&#12510;&#12531;&#12489;
#&#12458;&#12503;&#12471;&#12519;&#12531;&#12399;sample_dt&#12467;&#12510;&#12531;&#12489;&#12392;&#20849;&#36890;
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       &#12356;       &#12356;
#2: Group2         23         72       &#12363;       &#12363;
#3: Group1         20         66       &#12356;       &#12356;
#4: Group3         47         85       &#12384;       &#12425;

#&#12487;&#12540;&#12479;&#12398;&#12493;&#12473;&#12488;:nest_dt&#12467;&#12510;&#12531;&#12489;
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]>

#&#12487;&#12540;&#12479;&#12398;&#12493;&#12473;&#12488;&#35299;&#38500;:unnest_dt&#12467;&#12510;&#12531;&#12489;
unnest_dt(NestData, ndt)
# Group X_num_Data Y_num_Data Chr_Data Fct_Data
#<char>      <int>      <int>   <char>   <fctr>
#1: Group4          3         58       &#12395;       &#12398;
#2: Group4         36         76       &#12398;       &#12384;
#3: Group4          2         82       &#12395;       &#12425;
#4: Group4         44         66       &#12356;       &#12356;
#5: Group4          3         53       &#12356;       &#12363;
#&#20197;&#19979;&#30465;&#30053;

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

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