データにGroup番号やGroup内での出現順、そして、行位置の列を「tidyverse」パッケージまたは「dplyr」パッケージを利用して付与する方法です。非常に簡単に付与することができます。ポイントは「group_by」コマンドで基準となるGroupの列を指定することです。
なお、紹介するコマンドは「mutate」コマンドだけでなく、「summarise」コマンドなどと組み合わせて使用することが可能です。
「dplyr」パッケージは「tidyverse」パッケージに含まれています。実行コマンドでは「tidyverse」パッケージを利用しています。
パッケージバージョンは2.0.0、実行コマンドはR version 4.3.1で確認しています。
パッケージのインストール
下記、コマンドを実行してください。
#パッケージのインストール install.packages("tidyverse")
実行コマンド
詳細はコメント、パッケージのヘルプを確認してください。
#パッケージの読込み library("tidyverse") ###データ例の作成##### set.seed(1234) TestData <- tibble(Group = sample(LETTERS[1:4], size = 8, replace = TRUE), Data_1 = rep(1:4, time = 2), Data_2 = rep(5:8, time = 2)) %>% group_by(Group) #確認 #4つのGroupが指定されている TestData # A tibble: 8 × 3 # Groups: Group [4] # Group Data_1 Data_2 #<chr> <int> <int> #1 D 1 5 #2 D 2 6 #3 B 3 7 #4 B 4 8 #5 A 1 5 #6 D 2 6 #7 C 3 7 #8 A 4 8 ####### #Group番号の列を付与する:dplyr::cur_group_idコマンド TestData %>% mutate(Group_No = cur_group_id(), .before = Group) %>% arrange(Group_No) # A tibble: 8 × 4 # Groups: Group [4] # Group_No Group Data_1 Data_2 # <int> <chr> <int> <int> #1 1 A 1 5 #2 1 A 4 8 #3 2 B 3 7 #4 2 B 4 8 #5 3 C 3 7 #6 4 D 1 5 #7 4 D 2 6 #8 4 D 2 6 #Group内での出現順の列を付与する:dplyr::row_numberコマンド TestData %>% mutate(Group_in_id = row_number(), .before = Group) %>% arrange(Group) # A tibble: 8 × 4 # Groups: Group [4] # Group_in_id Group Data_1 Data_2 # <int> <chr> <int> <int> #1 1 A 1 5 #2 2 A 4 8 #3 1 B 3 7 #4 2 B 4 8 #5 1 C 3 7 #6 1 D 1 5 #7 2 D 2 6 #8 3 D 2 6 #行位置の列を付与する:dplyr::cur_group_rowsコマンド TestData %>% mutate(Group_in_id = cur_group_rows(), .before = Group) %>% arrange(Group) # A tibble: 8 × 4 # Groups: Group [4] # Group_in_id Group Data_1 Data_2 # <int> <chr> <int> <int> #1 5 A 1 5 #2 8 A 4 8 #3 3 B 3 7 #4 4 B 4 8 #5 7 C 3 7 #6 1 D 1 5 #7 2 D 2 6 #8 6 D 2 6
少しでも、あなたの解析が楽になりますように!!