データフレームの最小、最小値を元データに追加するオリジナル関数DataMaxMinを作成しました。
エクセルをXlConnectパッケージで取り込み後、関数DataMaxMinで処理することで、fmsbパッケージでレーダーチャートを簡単に作成できるのではと思います。コードを改造することで標準偏差や中央値に変更することが出来ます。
R version 4.1.2で確認しています。
コードの紹介
デフォルトでは最大値、最小値を0にしMaxMinVecというデータを作成します。zeromax,zerominをFALSE設定することで元データから最大値、最小値を取得することが出来ます。詳細は下記コード内を確認ください。コードを実行することでDataMaxMin(data = NULL, colname = colnames(data), zeromax = TRUE, zeromin = TRUE, fold = 1)を使えるようになります。なお、最大値はzeromax = FALSE時にfoldで倍率を設定できます。
オリジナル関数DataMaxMin
#処理データを設定しないとエラーになります。デフォルトでは行名は元のデータを使用します。
DataMaxMin <- function(data = NULL, colname = colnames(data),
zeromax = TRUE, zeromin = TRUE, fold = 1){
#おまじない
data <- as.data.frame(data)
#最大,最小の取得判断
SumZero <- sum(zeromax, zeromin)
#最大,最小の取得判断
SumVec <- c(zeromax, zeromin)
if (SumZero == 2){
MaxVec <- rep(0, ncol(data))
MinVec <- rep(0, ncol(data))
}else{
if (SumZero == 1){
switch(which(SumVec == TRUE),
MaxVec <- rep(0, ncol(data)),
MinVec <- rep(0, ncol(data)))
switch(which(SumVec == FALSE),
MaxVec <- apply(data, 2, max),
MinVec <- apply(data, 2, min))
}else{
MaxVec <- apply(data, 2, max)
MinVec <- apply(data, 2, min)
}
}
MaxMinVec <- rbind(MAx = MaxVec * fold, Min = MinVec) #最大、最小の順に結合して完成
colnames(MaxMinVec) <- colnames(data) #行名の付与
return(MaxMinVec)
}
出力例
以下のデータ例を処理した例を紹介します。
AnaData <- data.frame(
total = runif(15, 1, 5),
phys = rnorm(15, 10, 2),
psycho = runif(15, 4, 20))
DataMaxMin(AnaData)
#total phys psycho
#MAx 0 0 0
#Min 0 0 0
DataMaxMin(AnaData, zeromax = FALSE, zeromin = FALSE)
#total phys psycho
#MAx 4.693734 12.740021 17.574279
#Min 1.037983 6.498533 5.180478
DataMaxMin(AnaData, zeromax = FALSE)
#total phys psycho
#MAx 4.693734 12.74002 17.57428
#Min 0.000000 0.00000 0.00000
DataMaxMin(AnaData, zeromin = FALSE)
#total phys psycho
#MAx 0.000000 0.000000 0.000000
#Min 1.037983 6.498533 5.180478
少しでも、ウェブや実験の解析が楽になりますように!!