[R] merging tables based on both row and column names
    Giorgio Garziano 
    giorgio.garziano at ericsson.com
       
    Thu Oct  1 17:26:30 CEST 2015
    
    
  
I reworked Frank Schwidom's solution to make it shorter than its original version.
  test1 <- (rbind(c(0.1,0.2),0.3,0.1))
  rownames(test1)=c('y1','y2','y3')
  colnames(test1) = c('x1','x2');
  test2 <- (rbind(c(0.8,0.9,0.5),c(0.5,0.1,0.6)))
  rownames(test2) = c('y2','y5')
  colnames(test2) = c('x1','x3','x2')
  lTest12 <- list(test1, test2)
  namesRow <- unique( unlist( lapply(lTest12, rownames)))
  namesCol <- unique( unlist( lapply(lTest12, colnames)))
# here reworked code starts
  tmp1 <- sapply(lTest12, function(x) as.vector( x[match(namesRow, rownames(x)), match(namesCol, colnames(x))]))
  tmp2 <- apply(tmp1, 1, function(x) { na.omit(x) })
  dimnames1 <- list(namesRow, namesCol)
  tmp3 <- array(data = tmp2, dim = sapply(dimnames1, length), dimnames = dimnames1)
  tmp3
  > paste(tmp3)
  [1] "0.1"         "c(0.3, 0.8)" "0.1"         "0.5"         "0.2"
  [6] "c(0.3, 0.5)" "0.1"         "0.6"         "numeric(0)"  "0.9"
  [11] "numeric(0)"  "0.1"
  > tmp3
  x1           x2        x3
  y1 0.1       0.2       Numeric,0
  y2 Numeric,2 Numeric,2 0.9
  y3 0.1       0.1       Numeric,0
  y5 0.5       0.6       0.1
  >
  > tmp3["y2","x1"]
  [[1]]
  [1] 0.3 0.8
  > tmp3["y2","x2"]
  [[1]]
  [1] 0.3 0.5
	[[alternative HTML version deleted]]
    
    
More information about the R-help
mailing list