データフレームの最小、最小値を元データに追加するオリジナル関数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
少しでも、ウェブや実験の解析が楽になりますように!!