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

「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

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

Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.
タイトルとURLをコピーしました