2010-04-22 1 views
5

Ho due piccoli telegrammi di dati, this_tx e last_tx. Sono, in ogni modo che posso dire, completamente identici. this_tx == last_tx restituisce una cornice di dimensioni identiche, tutte TRUE. this_tx %in% last_tx, due TRUEs. Ispezionato visivamente, chiaramente identico. Ma quando chiamoCosa rende questi due frame di dati R non identici?

identical(this_tx, last_tx)

ho un FALSE. Esilarante, anche

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

restituirà un TRUE. Se imposto lo this_tx <- last_tx, riceverò uno TRUE.

Che cosa sta succedendo? Non ho la più profonda comprensione della meccanica interna di R, ma non riesco a trovare una sola differenza tra i due frame di dati. Se è rilevante, le due variabili nei frame sono entrambi fattori: stessi livelli, stessa codifica numerica per i livelli, entrambi solo sottoinsiemi dello stesso frame di dati originale. Convertirli in vettori di caratteri non aiuta.

Sfondo (perché non mi dispiacerebbe nemmeno un aiuto su questo): ho registrazioni di trattamenti farmacologici dati ai pazienti. Ogni record di trattamento specifica essenzialmente una persona e una data. Una seconda tabella ha un record per ogni farmaco e dose somministrata durante un particolare trattamento (di solito, ad ogni trattamento vengono somministrati alcuni farmaci). Sto cercando di identificare periodi contigui durante i quali la persona stava prendendo le stesse combinazioni di farmaci alle stesse dosi.

Il piano migliore che ho trovato è quello di controllare i trattamenti in ordine cronologico. Se la combinazione di farmaci e dosi per il trattamento [i] è identica alla combinazione al trattamento [i-1], allora il trattamento [i] è una parte della stessa fase del trattamento [i-1]. Certo, se non riesco a confrontare le combinazioni farmaco/dose, è chiaro.

+2

Se si potesse pubblicare una coppia di esempi di frame di dati, sarebbe di aiuto, preferibilmente come risultato dell'esecuzione di 'dput()' sui frame. – Sharpie

+0

Sharpie vince. I due frame di dati trasportavano ancora i nomi row.nome del frame dati madre, che compare in un dput() ma non in str(). Sharpie, se pubblichi una risposta, la segnerò meglio. –

+0

Sono davvero sorpreso, ho sempre pensato che 'str' fosse una versione" prettificata "di' dput'. Credo che sia solo un riassunto. – Sharpie

risposta

6

Beh, il grido stanco di "moar specifics plz!" potrebbe vincere in questo caso:

Controllare l'output di dput() e postare se possibile. str() riassume semplicemente il contenuto di un oggetto mentre dput() scarica tutti i dettagli cruenti in un modulo che può essere copiato e incollato in un altro interprete R per rigenerare l'oggetto.

6

Generalmente, in questa situazione è utile provare all.equal che ti darà alcune informazioni sul motivo per cui due oggetti non sono equivalenti.

+0

Ho provato questo e ho ottenuto un '' piuttosto criptico '' Attributi: "', che è quello che mi ha portato a str() i frame di dati - ma "Attributes: Component 2" non mi portano davvero ai numeri delle righe. –

+0

Beh, attributi diversi suggerirebbero di guardare gli attributi '... – hadley