「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
少しでも、あなたの解析が楽になりますように!!