行や列ごとの処理であれば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) #実測終了ベクトルの作成
########
参考例:項目名毎に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))
}
コード実行後に出力されるプロット
データ作成にはrnormを使用しているので、データは毎回変わります。

少しでも、あなたの解析が楽になりますように!!