Tenemos esta matriz:

  ori<-matrix(c(1,1,0,0,1,1,0,1,1,0,1,0,1,0,0,0,1,0,1,1),ncol=5,nrow=4)
  rownames(ori)<-c("sp1","sp2","sp3","sp4")
  colnames(ori)<-c("p1","p2","p3","p4","p5")
> ori
    p1 p2 p3 p4 p5
sp1  1  1  1  1  1
sp2  1  1  0  0  0
sp3  0  0  1  0  1
sp4  0  1  0  0  1

Lo que quiero es que R calcule cuantas veces coinciden las sp en los p.
El resultado que quiero obtener es:

    sp1 sp2 sp3 sp4
sp1   5   2   2   2
sp2   2   2   0   1
sp3   2   0   2   1
sp4   2   1   1   2

Una matriz con el numero de veces que coinciden los sp en un p.
Lo que os pido es un poco de ayuda para mejorar lo que viene más abajo.
Estoy seguro que se puede hacer de una forma más elegante ¿Vectorizarlo se
dice? Seguro que hay una función de la familia de apply que sirve para hacer
estas cosas, pero no he encontrado nada.

Muchas gracias.

##comparaciones
#preparamos cositas
 v.res<-0
 matriu<-matrix(rep(0,12),ncol=4,nrow=4)
#a calcular
for(f in seq(1,nrow(ori))) #para cada fila (f)
 {
  for(n in seq(1,nrow(ori))) #compara con el resto de las filas (n)
  {
   r1<-ori[f,]==1 #que elementos de la fila f son iguales a 1
   #r1
   r2<-ori[n,]==1 #que elementos de la fila n son iguales a 1
   #r2
   com<-as.character(r1&r2) #que elementos son igual a 1 a la vez en la fila
f y la fila n
   #com
   n.iguales<-length(com[com=="TRUE"]) #cuenta los elementos iguales a 1 en
ambas filas
   #n.iguales
   v.res[n]<-n.iguales #pone el numero de iuales en un vector
   #v.res
  }
 matriu[f,]<-v.res #para cafa fila f crea una fila en la matriz de los datos
con el vector resultado anterior
}
 colnames(matriu)<-rownames(matriu)<-c("sp1","sp2","sp3","sp4") #asigna
nombres a filas y columnas.


jaume

-- 
Jaume Tormo Blanes
IMEM Ramon Margalef.
Carretera San Vicente del Raspeig s/n
03690 San Vicente del Raspeig - Alicante
www.ua.es
acercad.wordpress.com

	[[alternative HTML version deleted]]

