「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("か", "ら", "だ", "に", "い", "い", "も", "の"), 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) ######## #並び替え:nest_arrangeコマンド #降順:dplyr::descコマンドと組み合わせる TestData %>% nest_arrange(NestData, Chr_Data, desc(X_num_Data)) %>% #tidyr::unnestコマンドで展開し内容を確認:通常いらない 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 い 32 87 #2 Group_01 い 26 52 #3 Group_01 い 17 98 #4 Group_01 ら 26 58 #5 Group_02 だ 41 67 #6 Group_02 だ 22 56 #カウント:nest_countコマンド TestData %>% nest_count(NestData, Chr_Data) %>% #tidyr::unnestコマンドで展開し内容を確認:通常いらない tidyr::unnest(NestData) %>% head() # A tibble: 6 x 3 # Group Chr_Data n # <chr> <chr> <int> #1 Group_01 い 3 #2 Group_01 ら 1 #3 Group_02 だ 2 #4 Group_02 に 3 #5 Group_02 の 1 #6 Group_02 も 4 #mutateを適応:nest_mutateコマンド TestData %>% nest_mutate(NestData, X_num_Data = X_num_Data / 10, Y_num_Data = Y_num_Data * 0.1) %>% #tidyr::unnestコマンドで展開し内容を確認:通常いらない 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 い 3.2 8.7 #2 Group_01 ら 2.6 5.8 #3 Group_01 い 1.7 9.8 #4 Group_01 い 2.6 5.2 #5 Group_02 も 4.9 8.2 #6 Group_02 も 2.9 5.6 #列の移動:nest_relocateコマンド TestData %>% nest_relocate(NestData, X_num_Data, .after = Y_num_Data) %>% #tidyr::unnestコマンドで展開し内容を確認:通常いらない 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 い 87 32 #2 Group_01 ら 58 26 #3 Group_01 い 98 17 #4 Group_01 い 52 26 #5 Group_02 も 82 49 #6 Group_02 も 56 29 #列名の変更:nest_renameコマンド #nest_rename_withコマンドもあります TestData %>% nest_rename(NestData, 'KARADA-GOOD' = X_num_Data) %>% #tidyr::unnestコマンドで展開し内容を確認:通常いらない tidyr::unnest(NestData) %>% head() # A tibble: 6 x 4 # Group Chr_Data `KARADA-GOOD` Y_num_Data # <chr> <chr> <int> <int> #1 Group_01 い 32 87 #2 Group_01 ら 26 58 #3 Group_01 い 17 98 #4 Group_01 い 26 52 #5 Group_02 も 49 82 #6 Group_02 も 29 56 #列の選択:nest_selectコマンド TestData %>% nest_select(NestData, X_num_Data) %>% #tidyr::unnestコマンドで展開し内容を確認:通常いらない 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を適応:nest_summariseコマンド TestData %>% nest_summarise(NestData, n = n(), Median_X_num_Data = median(X_num_Data), Mean_Y_num_Data = median(Y_num_Data)) %>% #tidyr::unnestコマンドで展開し内容を確認:通常いらない 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を適応:nest_sliceコマンド TestData %>% nest_slice(NestData, 2, 8, 9) %>% #tidyr::unnestコマンドで展開し内容を確認:通常いらない 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 ら 26 58 #2 Group_02 も 29 56 #3 Group_02 だ 22 56 #4 Group_02 に 22 71 #5 Group_03 の 22 59 #6 Group_04 に 6 57
少しでも、あなたの解析が楽になりますように!!