2010-04-22 10 views
5

Ich habe zwei kleine Datenrahmen, this_tx und last_tx. Sie sind, in jeder Hinsicht, die ich sagen kann, völlig identisch. this_tx == last_tx ergibt sich ein Rahmen mit identischen Abmessungen, alle TRUE. this_tx %in% last_tx, zwei TRUEs. Sichtprüfung visuell, eindeutig identisch. Aber wenn ich rufeWas macht diese beiden R-Datenrahmen nicht identisch?

identical(this_tx, last_tx)

Ich bekomme eine FALSE. Vergnügt, auch

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

eine TRUE zurück. Wenn ich this_tx <- last_tx einstelle, erhalte ich eine TRUE.

Was ist los? Ich habe nicht das tiefste Verständnis für die interne Mechanik von R, aber ich kann keinen einzigen Unterschied zwischen den beiden Datenrahmen finden. Wenn es relevant ist, sind die beiden Variablen in den Rahmen beide Faktoren - gleiche Ebenen, gleiche numerische Codierung für die Ebenen, beide nur Teilmengen desselben ursprünglichen Datenrahmens. Die Konvertierung in Zeichenvektoren hilft nicht.

Hintergrund (weil ich auch nichts dagegen haben würde): Ich habe Aufzeichnungen über medikamentöse Behandlungen an Patienten gegeben. Jeder Behandlungsdatensatz spezifiziert im Wesentlichen eine Person und ein Datum. Eine zweite Tabelle enthält eine Aufzeichnung für jedes Medikament und jede Dosis, die während einer bestimmten Behandlung verabreicht werden (normalerweise werden bei jeder Behandlung ein paar Medikamente verabreicht). Ich versuche, zusammenhängende Perioden zu identifizieren, in denen die Person die gleichen Kombinationen von Drogen in den gleichen Dosen nahm.

Der beste Plan, den ich mir ausgedacht habe, ist, die Behandlungen chronologisch zu überprüfen. Wenn die Kombination von Medikamenten und Dosen für die Behandlung [i] mit der Kombination bei der Behandlung [i-1] identisch ist, dann ist die Behandlung [i] ein Teil derselben Phase wie die Behandlung [i-1]. Natürlich, wenn ich Drogen/Dosis-Kombinationen nicht vergleichen kann, das ist richtig.

+2

Wenn Sie ein Beispielpaar von Datenrahmen posten könnten, würde es helfen - vorzugsweise als Ergebnis der Ausführung von 'dput()' in den Frames. – Sharpie

+0

Sharpie gewinnt. Die zwei Datenrahmen trugen immer noch die Reihe.Name des Mutter-Datenrahmens, die in einem dput(), aber nicht str() angezeigt wird. Sharpie, wenn du als Antwort postest, werde ich es am besten markieren. –

+0

Ich bin wirklich überrascht - ich dachte immer 'str' war eine" schönere "Version von' dput'. Schätze es stellt sich heraus, dass es nur eine Zusammenfassung ist. – Sharpie

Antwort

6

Nun, der abgestumpfte Schrei von "Moar Specifics PLZ!" kann in diesem Fall gewinnen:

Überprüfen Sie die Ausgabe von dput() und post, wenn möglich. str() fasst nur den Inhalt eines Objekts zusammen, während dput() alle blutigen Details in einer Form ausgibt, die kopiert und in einen anderen R-Interpreter eingefügt werden kann, um das Objekt neu zu generieren.

6

Im Allgemeinen ist es in dieser Situation nützlich, all.equal auszuprobieren, die Ihnen einige Informationen darüber geben wird, warum zwei Objekte nicht gleichwertig sind.

+0

Ich habe dies versucht und eine ziemlich kryptische '" Attribute: "', was mich zu str() führte die Datenrahmen - aber "Attribute: Komponente 2" nicht führe mich wirklich zu den Zeilennummern. –

+0

Nun, verschiedene Attribute würden vorschlagen, Attribute zu betrachten ... – hadley