Rとウェブ解析:データフレームの最小、最小値を元のデータに追加するオリジナル関数「DataMaxMin」です。


データフレームの最小、最小値を元データに追加するオリジナル関数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

少しでも、ウェブや実験の解析が楽になりますように!!

スポンサードリンク

スポンサードリンク