R_Tips0 のバックアップ(No.57) - アールメカブ

アールメカブ


R_Tips0 のバックアップ(No.57)


Rの備忘録

R で2種類のグラフィックスを作成するとする.片方にはカテゴリA, C, D があり,片方にはA, B, C があるとする.ここで両方に共通するカテゴリを同じ色と指定したい.もっとも簡単な方法は?もちろん,手作業でアドホックに処理するのはなしで.

colorPlot.png

思い出さないなぁ. もっと簡単な方法があったはずだが,とりあえず,こんな方法でも実現できる.

まず二つの組に登場するカテゴリを一緒くたにしてベクトル z として扱い,それぞれの組のカテゴリ x, y が,この共通ベクトル z の何番目にあるかを調べるという方策である.

x <- c("A","C", "D")
y <- c("A","B","C")
z <- unique(c(x,y))

#y の各要素がzの何番目にあるか知りたい

y %in% z #意味無し

# 添字番号を取るためにループする?こんな厄介な処理が必要なのかなぁ?

xcol <- NULL
ycol <-  NULL

for( i in 1:length(x)){
 for(j in 1:length(z)){
   if(x[i] == z[j]){
     cat(j, "\n")
     xcol <- c(xcol, j)
   }
 }
}
for( i in 1:length(y)){
 for(j in 1:length(z)){
   if(y[i] == z[j]){
     cat(j, "\n")      
     ycol <- c(ycol, j)
   }
 }
}
xx <- sample(x, 100, rep = T)
xx.n <- sample(1:5, 100, rep = T)
xx.l <- sample(x,100, rep = T)

yy <- sample(y,100, rep = T)
yy.n <- sample(1:5, 100, rep = T)
yy.l <- sample(y,100, rep = T)
par(mfrow = c(1,2))
matplot(prop.table(table(xx.n, xx.l)), type = "l",
         col = xcol, lwd = 3)
legend(1,.1, legend = x, col =  xcol,  lwd = 3)

matplot(prop.table(table(yy.n, yy.l)), type = "l",
          col = ycol, lwd = 3)
legend(1,.1, legend = y, col =  ycol,  lwd = 3)

# いや,絶対もっと簡単な方法があったはず