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

アールメカブ


R_Tips0 のバックアップソース(No.72)

[[Rの備忘録]]

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


#ref(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)
# いや,絶対もっと簡単な方法があったはず