Rで解析:「Nested Data」の操作が大変簡単です!!「nplyr」パッケージ

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

「Nested Data」の操作を「unnest」せずに簡単にできるパッケージの紹介です。かなり便利なパッケージだと思います。「tidyverse」や「tidyr」パッケージを利用している方はぜひお試しください。

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

スポンサーリンク

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

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

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

実行コマンド

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

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

###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
set.seed(1234)
n <- 30
TestData <- tibble(Group = sample(paste0("Group_",
                                         formatC(1:4, width = 2, flag = "0")),
                                  n, replace = TRUE),
                   Chr_Data = sample(c("&#12363;", "&#12425;", "&#12384;", "&#12395;",
                                       "&#12356;", "&#12356;", "&#12418;", "&#12398;"),
                                     n, replace = TRUE),
                   X_num_Data = sample(c(1:50), n, replace = TRUE),
                   Y_num_Data = sample(c(51:100), n, replace = TRUE)) %>%
  group_by(Group) %>%
  nest(NestData = -Group) %>%
  ungroup() %>%
  arrange(Group)
########

#&#20006;&#12403;&#26367;&#12360;:nest_arrange&#12467;&#12510;&#12531;&#12489;
#&#38477;&#38918;:dplyr::desc&#12467;&#12510;&#12531;&#12489;&#12392;&#32068;&#12415;&#21512;&#12431;&#12379;&#12427;
TestData %>%
  nest_arrange(NestData, Chr_Data, desc(X_num_Data)) %>%
  #tidyr::unnest&#12467;&#12510;&#12531;&#12489;&#12391;&#23637;&#38283;&#12375;&#20869;&#23481;&#12434;&#30906;&#35469;:&#36890;&#24120;&#12356;&#12425;&#12394;&#12356;
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 4
#  Group    Chr_Data X_num_Data Y_num_Data
#  <chr>    <chr>         <int>      <int>
#1 Group_01 &#12356;               32         87
#2 Group_01 &#12356;               26         52
#3 Group_01 &#12356;               17         98
#4 Group_01 &#12425;               26         58
#5 Group_02 &#12384;               41         67
#6 Group_02 &#12384;               22         56


#&#12459;&#12454;&#12531;&#12488;:nest_count&#12467;&#12510;&#12531;&#12489;
TestData %>%
  nest_count(NestData, Chr_Data) %>%
  #tidyr::unnest&#12467;&#12510;&#12531;&#12489;&#12391;&#23637;&#38283;&#12375;&#20869;&#23481;&#12434;&#30906;&#35469;:&#36890;&#24120;&#12356;&#12425;&#12394;&#12356;
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 3
#  Group    Chr_Data     n
#  <chr>    <chr>    <int>
#1 Group_01 &#12356;           3
#2 Group_01 &#12425;           1
#3 Group_02 &#12384;           2
#4 Group_02 &#12395;           3
#5 Group_02 &#12398;           1
#6 Group_02 &#12418;           4


#mutate&#12434;&#36969;&#24540;:nest_mutate&#12467;&#12510;&#12531;&#12489;
TestData %>%
  nest_mutate(NestData,
              X_num_Data = X_num_Data / 10,
              Y_num_Data = Y_num_Data * 0.1) %>%
  #tidyr::unnest&#12467;&#12510;&#12531;&#12489;&#12391;&#23637;&#38283;&#12375;&#20869;&#23481;&#12434;&#30906;&#35469;:&#36890;&#24120;&#12356;&#12425;&#12394;&#12356;
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 4
#  Group    Chr_Data X_num_Data Y_num_Data
#  <chr>    <chr>         <dbl>      <dbl>
#1 Group_01 &#12356;              3.2        8.7
#2 Group_01 &#12425;              2.6        5.8
#3 Group_01 &#12356;              1.7        9.8
#4 Group_01 &#12356;              2.6        5.2
#5 Group_02 &#12418;              4.9        8.2
#6 Group_02 &#12418;              2.9        5.6


#&#21015;&#12398;&#31227;&#21205;:nest_relocate&#12467;&#12510;&#12531;&#12489;
TestData %>%
  nest_relocate(NestData, X_num_Data, .after = Y_num_Data) %>%
  #tidyr::unnest&#12467;&#12510;&#12531;&#12489;&#12391;&#23637;&#38283;&#12375;&#20869;&#23481;&#12434;&#30906;&#35469;:&#36890;&#24120;&#12356;&#12425;&#12394;&#12356;
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 4
#  Group    Chr_Data Y_num_Data X_num_Data
#  <chr>    <chr>         <int>      <int>
#1 Group_01 &#12356;               87         32
#2 Group_01 &#12425;               58         26
#3 Group_01 &#12356;               98         17
#4 Group_01 &#12356;               52         26
#5 Group_02 &#12418;               82         49
#6 Group_02 &#12418;               56         29


#&#21015;&#21517;&#12398;&#22793;&#26356;:nest_rename&#12467;&#12510;&#12531;&#12489;
#nest_rename_with&#12467;&#12510;&#12531;&#12489;&#12418;&#12354;&#12426;&#12414;&#12377;
TestData %>%
  nest_rename(NestData, 'KARADA-GOOD' = X_num_Data) %>%
  #tidyr::unnest&#12467;&#12510;&#12531;&#12489;&#12391;&#23637;&#38283;&#12375;&#20869;&#23481;&#12434;&#30906;&#35469;:&#36890;&#24120;&#12356;&#12425;&#12394;&#12356;
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 4
#  Group    Chr_Data `KARADA-GOOD` Y_num_Data
#  <chr>    <chr>            <int>      <int>
#1 Group_01 &#12356;                  32         87
#2 Group_01 &#12425;                  26         58
#3 Group_01 &#12356;                  17         98
#4 Group_01 &#12356;                  26         52
#5 Group_02 &#12418;                  49         82
#6 Group_02 &#12418;                  29         56


#&#21015;&#12398;&#36984;&#25246;:nest_select&#12467;&#12510;&#12531;&#12489;
TestData %>%
  nest_select(NestData, X_num_Data) %>%
  #tidyr::unnest&#12467;&#12510;&#12531;&#12489;&#12391;&#23637;&#38283;&#12375;&#20869;&#23481;&#12434;&#30906;&#35469;:&#36890;&#24120;&#12356;&#12425;&#12394;&#12356;
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 2
#  Group    X_num_Data
#  <chr>         <int>
#1 Group_01         32
#2 Group_01         26
#3 Group_01         17
#4 Group_01         26
#5 Group_02         49
#6 Group_02         29


#summarise&#12434;&#36969;&#24540;:nest_summarise&#12467;&#12510;&#12531;&#12489;
TestData %>%
  nest_summarise(NestData, 
                 n = n(),
                 Median_X_num_Data = median(X_num_Data),
                 Mean_Y_num_Data = median(Y_num_Data)) %>%
  #tidyr::unnest&#12467;&#12510;&#12531;&#12489;&#12391;&#23637;&#38283;&#12375;&#20869;&#23481;&#12434;&#30906;&#35469;:&#36890;&#24120;&#12356;&#12425;&#12394;&#12356;
  tidyr::unnest(NestData) %>% head()
# A tibble: 4 x 4
#   Group        n Median_X_num_Data Mean_Y_num_Data
#   <chr>    <int>             <dbl>           <dbl>
#1 Group_01     4                26            72.5
#2 Group_02    11                29            69  
#3 Group_03     3                 8            62  
#4 Group_04    12                24            68.5


#slice&#12434;&#36969;&#24540;:nest_slice&#12467;&#12510;&#12531;&#12489;
TestData %>%
  nest_slice(NestData, 2, 8, 9) %>%
  #tidyr::unnest&#12467;&#12510;&#12531;&#12489;&#12391;&#23637;&#38283;&#12375;&#20869;&#23481;&#12434;&#30906;&#35469;:&#36890;&#24120;&#12356;&#12425;&#12394;&#12356;
  tidyr::unnest(NestData) %>% head()
# A tibble: 6 x 4
#  Group    Chr_Data X_num_Data Y_num_Data
#  <chr>    <chr>         <int>      <int>
#1 Group_01 &#12425;               26         58
#2 Group_02 &#12418;               29         56
#3 Group_02 &#12384;               22         56
#4 Group_02 &#12395;               22         71
#5 Group_03 &#12398;               22         59
#6 Group_04 &#12395;                6         57

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

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