Hola,

Muchas gracias, vuestras respuestas me han sido de mucha utilidad.

Un saludo

El 26 de marzo de 2009 16:44, Jorge Ivan Velez
<jorgeivanvelez@gmail.com>escribió:

>
> Buenos dias,
> En mi respuesta de ayer cometí un error (gracias a Olivier Nuñez por
> hacerme notarlo).
>
> El problema está, más que en el nombre de las filas, en su orden. Esta
> nueva versión permite comparar ambos data frames (x y ordenado, ahora
> llamados A y B, respectivamente):
>
> # Datos originales
> A<-structure(list(geneid = c(1, 1, 2, 2, 3, 3), array = structure(c(1L,
> 2L, 1L, 2L, 1L, 2L), .Label = c("array1", "array2"), class = "factor"),
>     signal = 10:15, flag = structure(c(2L, 1L, 2L, 1L, 2L, 1L
>     ), .Label = c("false", "true"), class = "factor")), .Names =
> c("geneid",
> "array", "signal", "flag"), row.names = c(NA, -6L), class = "data.frame")
>
> B<-structure(list(flag = structure(c(2L, 2L, 1L, 2L, 1L, 1L), .Label =
> c("false",
> "true"), class = "factor"), geneid = c(3, 1, 2, 2, 3, 1), signal = c(14L,
> 10L, 13L, 12L, 15L, 11L), array = structure(c(1L, 1L, 2L, 1L,
> 2L, 2L), .Label = c("array1", "array2"), class = "factor")), .Names =
> c("flag",
> "geneid", "signal", "array"), row.names = c(5L, 1L, 4L, 3L, 6L,
> 2L), class = "data.frame")
>
> # Son A y B iguales?
> A<-A[,order(colnames(A))]                               # ordenando las
> columnas de A
> B<-B[order(rownames(B)),order(colnames(B))]   # ordenando las filas y
> columnas de B
> all.equal(A,B)
> [1] TRUE
>
> Ahora, usemos una función:
>
> # A y B son data frames
> Compare<-function(A,B){
>     A<-A[,order(colnames(A))]
>     B<-B[order(rownames(B)),order(colnames(B))]
>     all.equal(A,B)
>   }
>
> Compare(A,B)
> [1] TRUE
>
>
> Espero sea de utilidad,
>
> --JIV
>
> Jorge Ivan Velez
> jorgeivanvelez+at+gmail+dot+com
>
>
> 2009/3/25 Usuario R <r.user.spain@gmail.com>
>
>> 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]]

