Te propongo un método sistemático.

Para ilustrarlo, a continuación reproduzco tu ejemplo:

 > A = data.frame(geneid=c(1,1,2,2,3,3),array=rep(c 
("array1","array2"),3),signal=10:15,flag=rep(c("true","false"),3))

 > A
   geneid  array signal  flag
1      1 array1     10  true
2      1 array2     11 false
3      2 array1     12  true
4      2 array2     13 false
5      3 array1     14  true
6      3 array2     15 false

 > B = A[c(5,1,4,3,6,2) , c(4,1,3,2)] #La matriz B es el resultado de  
una permutación de las columnas y filas de A

 > B
    flag geneid signal  array
5  true      3     14 array1
1  true      1     10 array1
4 false      2     13 array2
3  true      2     12 array1
6 false      3     15 array2
2 false      1     11 array2

Para comprobar la equivalencia de ambos data.frame,

 > A2=A[,order(colnames(A))] ; B2=B[,order(colnames(B))] #Primero, se  
ordenan las columnas de A y B

 > identical(A2,B2)
[1] FALSE

 > A3=A2[ do.call(order, A2) ,]; B3=B2[ do.call(order, B2) ,] #.....  
y luego las filas

Finalmente, se obtiene el resultado esperado

 > identical(A3,B3)
[1] TRUE
--  
____________________________________

Olivier G. Nuñez
Email: onunez@iberstat.es
Tel : +34 663 03 69 09
Web: http://www.iberstat.es

____________________________________




El 25/03/2009, a las 14:44, Usuario R escribió:

> Hola,
>
> Estoy tratando de comparar dos data frames que son iguales si  
> tienen las
> mismas filas, pero están desordenados tanto por filas como por  
> columnas.
> Además no tienen ninguna columna con valores únicos por lo que no 
> puedo
> ordenar en función de ninguna columna.  he visto no obstante que la
> combinación de dos columnas si tiene valores únicos, por lo que  
> para la
> comparación hice esto:
>
> Valores originales:
>
>> x
>   geneid  array signal  flag
> 1      1 array1     10  true
> 2      1 array2     11 false
> 3      2 array1     12  true
> 4      2 array2     13 false
> 5      3 array1     14  true
> 6      3 array2     15 false
>> y
>    flag geneid signal  array
> 1  true      3     14 array1
> 2  true      1     10 array1
> 3 false      2     13 array2
> 4  true      2     12 array1
> 5 false      3     15 array2
> 6 false      1     11 array2
>
>
> Primero ordeno las columnas:
>
>   x <- x[ , sort( colnames( x ) ) ]
>   y <- y[ , sort( colnames( y ) ) ]
>
> Luego ordeno la combinación de las columnas que forman valores únicos:
>
>   kk <- cbind( y,   "orden" = paste( y[ , "geneid" ],  y[ ,  
> "array" ], sep =
> "" ) )
>   ordenado <- y[ order( kk$orden ) , ]
>
> Los objetos ordenado y x son exactamente iguales pero al hacer esto:
>
>   library( RUnit )
>   checkEquals( ordenado, x )
>
>
> Obtengo que son diferentes, ¿Alguien sabe porqué? Es lo que yo siempre
> utilizo para ver si dos objetos grandes son o no iguales, pero en  
> este caso
> parece no funcionar...
>
> Gracias, un saludo
>
> 	[[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es


	[[alternative HTML version deleted]]

