本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

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

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

スポンサーリンク
Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.