2010-04-22 9 views
5

Tengo dos marcos de datos pequeños, this_tx y last_tx. Son, en todo lo que puedo decir, completamente idénticos. this_tx == last_tx da como resultado un marco de dimensiones idénticas, todas TRUE. this_tx %in% last_tx, dos TRUEs. Inspeccionado visualmente, claramente idéntico. Pero cuando llamo¿Qué hace que estos dos marcos de datos R no sean idénticos?

identical(this_tx, last_tx)

consigo un FALSE. Hilarante, incluso

identical(str(this_tx), str(last_tx))

devolverá un TRUE. Si configuro this_tx <- last_tx, obtendré un TRUE.

¿Qué está pasando? No tengo la comprensión más profunda de la mecánica interna de R, pero no puedo encontrar una sola diferencia entre los dos marcos de datos. Si es relevante, las dos variables en los marcos son ambos factores: los mismos niveles, la misma codificación numérica para los niveles, ambos subconjuntos del mismo marco de datos original. Convertirlos en vectores de caracteres no ayuda.

Antecedentes (porque tampoco me molestaría ayudar con esto): tengo registros de tratamientos con medicamentos que se administran a los pacientes. Cada registro de tratamiento esencialmente especifica una persona y una fecha. Una segunda tabla tiene un registro de cada medicamento y dosis administrados durante un tratamiento en particular (generalmente, se administran algunos medicamentos en cada tratamiento). Intento identificar períodos contiguos durante los cuales la persona tomaba las mismas combinaciones de medicamentos con las mismas dosis.

El mejor plan que he encontrado es verificar los tratamientos cronológicamente. Si la combinación de medicamentos y dosis para el tratamiento [i] es idéntica a la combinación en el tratamiento [i-1], entonces el tratamiento [i] es parte de la misma fase que el tratamiento [i-1]. Por supuesto, si no puedo comparar combinaciones de medicamentos/dosis, eso está bien.

+2

Si pudiera publicar un ejemplo de par de marcos de datos, sería de ayuda, preferiblemente como resultado de ejecutar 'dput()' en los marcos. – Sharpie

+0

Sharpie gana. Los dos marcos de datos seguían llevando los nombres de filas del marco de datos de la madre, que aparece en un dput() pero no en str(). Sharpie, si publicas como respuesta, lo marcaré mejor. –

+0

Estoy realmente sorprendido, siempre pensé que 'str' era una versión 'embellecida' de 'dput'. Supongo que resulta que es solo un resumen. – Sharpie

Respuesta

6

Bueno, el grito hastiado de "moar specifics plz!" puede ganar en este caso:

Compruebe la salida de dput() y publique si es posible. str() simplemente resume el contenido de un objeto, mientras que dput() vuelca todos los detalles sangrientos en una forma que puede copiarse y pegarse en otro intérprete R para regenerar el objeto.

6

En general, en esta situación es útil probar all.equal que le dará información acerca de por qué dos objetos no son equivalentes.

+0

Lo intenté y obtuve un '' enigmático '' Atributos: "', que es lo que me llevó a str() los marcos de datos, pero "Atributos: Componente 2" no realmente me llevan a los números de fila. –

+0

Bueno, diferentes atributos sugerirían mirar 'attributes' ... – hadley

Cuestiones relacionadas