Rとウェブ解析:データフレームの項目名で処理を繰り返す


行や列ごとの処理であればapplyやlapply、sapplyで処理できますが、データフレームの項目名で繰り返し処理をしたくなる時があります。

例えば、複数項目を時期を変えて複数回観測したデータなどです。
「項目X_1、項目X_2、項目X_3、項目Y_1、項目Y_2、項目Y_3・・・」

こんな、データを項目ごとに処理するコードの例をご紹介します。


コード実行に必要なパッケージの導入

下記コードを実行することで導入することができます。


 install.packages(c("ggplot2", "grid", "reshape"))


項目ごとに処理するポイント

ポイントは次のコードになります。
SampleDataの形式はデータフレームです。SampleDataは必要に応じて変更してください。

###繰り返し処理とラベルベクトル作成の準備########
CNAnaData <- t(as.data.frame(strsplit(colnames(SampleData),"_")))[, 1] #行名の取得、アンダーバーで識別 StartCol <- (which( duplicated(CNAnaData) == TRUE, arr.ind = TRUE)[1]) - 1 #開始行の取得 RangeCol <- unique(rle(CNAnaData)[[1]][rle(CNAnaData)[[1]] != 1]) #終了行の取得 LabName <- unique(CNAnaData) #ラベルの設定 ######## ###繰り返し処理ベクトルの設定######## StartColSelect <- seq(StartCol, (ncol(SampleData)), by = RangeCol) #実測開始ベクトルの作成 EndColSelect <- seq(StartCol + (RangeCol - 1), (ncol(SampleData)), by = RangeCol) #実測終了ベクトルの作成 ######## [/code]

参考例:項目名毎にBoxPlotをプロットするコード

以下のコードを実行することで項目名毎にBoxPlotがプロットされます。
melt関数でIDを指定していないので「Using as id variables」が表示されますが問題ありません。

library(ggplot2)
library(grid) #レイアウトの調整に必要
library(reshape) #melt関数の利用に必要

###サンプルデータの作成#####
Item <- 4 #項目数の設定、とりあえず4項目 Rep <- 4 #項目ごとの繰り返し数、とりあえず4回 DataVol <- 100 #列数の設定、とりあえず100個 ColNames <- NULL #行名の作成 for (i in seq(Item)){ name <- paste(LETTERS[i], "_", 1:Rep, sep="") ColNames <- c(ColNames, name) } SampleData <- as.data.frame(matrix(rnorm(DataVol * Item * Rep), nr = DataVol, nc = Item * Rep)) #データの作成 colnames(SampleData) <- ColNames #行名の設定 ######## ###繰り返し処理とラベルベクトル作成の準備######## CNAnaData <- t(as.data.frame(strsplit(colnames(SampleData),"_")))[, 1] #行名の取得、アンダーバーで識別 StartCol <- (which( duplicated(CNAnaData) == TRUE, arr.ind = TRUE)[1]) - 1 #開始行の取得 RangeCol <- unique(rle(CNAnaData)[[1]][rle(CNAnaData)[[1]] != 1]) #終了行の取得 LabName <- unique(CNAnaData) #ラベルの設定 ######## ###繰り返し処理ベクトルの設定######## StartColSelect <- seq(StartCol, (ncol(SampleData)), by = RangeCol) #実測開始ベクトルの作成 EndColSelect <- seq(StartCol + (RangeCol - 1), (ncol(SampleData)), by = RangeCol) #実測終了ベクトルの作成 ######## ###レイアウトの設定##### grid.newpage() gl <- grid.layout(nrow = 1, ncol = 4) #レイアウトを1*4で分割 pushViewport(viewport(layout=gl)) #grid.show.layout(gl) #レイアウトの確認 ######## ###繰り返し処理ベクトルで繰り返しプロット##### for(n in seq(StartColSelect)){ meltAnaData <- melt(SampleData[, StartColSelect[n]:EndColSelect[n]]) ###ggplot2でプロット##### plotdata <- ggplot(meltAnaData, aes(x = meltAnaData[, 1], y = meltAnaData[, 2], fill = meltAnaData[, 1])) PlotData <- plotdata + geom_boxplot(size = 0.1, show_guide = FALSE) + labs(x = paste("項目_", LabName[n], sep = ""), y = "") print(PlotData, vp = viewport(layout.pos.col = n)) } [/code]

コード実行後に出力されるプロット

データ作成にはrnormを使用しているので、データは毎回変わります。

少しでも、ウェブや実験の解析が楽になりますように!!
もし、不明点がありましたらこちらからお問い合わせください。

スポンサードリンク

関連コンテンツ


スポンサードリンク