「dplyr,tidyr」パッケージを使ったデータ処理例です。group_by,summarise,list,mutateコマンドの利用がポイントです。工夫することで紹介したt検定や合計以外の計算も可能です。なお、「tidyverse」パッケージで一括インストールしています。
・「tidyverse」パッケージ
https://www.tidyverse.org/
パッケージバージョンは1.3.1。パッケージのバージョンは1.3.0。実行コマンドはwindows 11のR version 4.1.2で確認しています。
パッケージのインストール
下記コマンドを実行してください。
#パッケージのインストール install.packages("tidyverse")
データ処理例
詳細はコマンド、パッケージのヘルプを確認してください。
#パッケージの読み込み
library("tidyverse")
###データ例の作成#####
set.seed(1234)
n <- 300
TestData <- tibble(ID = 1:n,
Group = sample(c("A", "B", "C"), n, replace = TRUE),
Time_A = rnorm(n), Time_B = rnorm(n))
#欠損値を代入
#パッケージのインストール
#ForImpパッケージがなければインストール
if(!require("ForImp", quietly = TRUE)){
install.packages("ForImp");require("ForImp")
}
TestData[, 3:4] <- missingmat2(TestData[, 3:4], missing = 150)
#######
###dplyr,tidyrを使ったデータ処理#####
ResultData <- TestData %>%
#group_byコマンドでグループ化
group_by(Group) %>%
#summarise,listコマンドでグループに対する値をまとめる
summarise(Time_A = list(Time_A), Time_B = list(Time_B)) %>%
#グループ化が解除されるので再度グループ化
group_by(Group) %>%
#mutateコマンドで色々な計算が可能
#Time_AとTime_Bに含まれる欠損値
mutate(Count_NA = sum(is.na(unlist(Time_A))) + sum(is.na(unlist(Time_B)))) %>%
#Time_A合計
mutate(Time_A_Sum = sum(unlist(Time_A), na.rm = TRUE)) %>%
#Time_AとTime_Bで対応のあるt検定
mutate(t_test = t.test(x = unlist(Time_A), y = unlist(Time_B),
var.equal = TRUE, paired = TRUE)$p.value)
########
#確認
ResultData
# A tibble: 3 x 6
# Groups: Group [3]
Group Time_A Time_B Count_NA Time_A_Sum t_test
<chr> <list> <list> <int> <dbl> <dbl>
1 A <dbl [92]> <dbl [92]> 52 0.0480 0.591
2 B <dbl [107]> <dbl [107]> 48 -7.12 0.767
3 C <dbl [101]> <dbl [101]> 50 5.19 0.333
少しでも、あなたの解析が楽になりますように!!