2010-04-22 11 views
5

Mam dwie małe ramki danych, this_tx i last_tx. Są one, w każdym calu, co mogę powiedzieć, całkowicie identyczne. this_tx == last_tx wyniki w ramce o identycznych wymiarach, wszystkie TRUE. this_tx %in% last_tx, dwa TRUEs. Inspekcja wizualna, wyraźnie identyczna. Ale gdy zgłoszęCo sprawia, że ​​te dwie ramki danych R nie są identyczne?

identical(this_tx, last_tx)

dostaję FALSE. Komicznie, nawet

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

zwróci TRUE. Jeśli ustawię this_tx <- last_tx, otrzymam TRUE.

Co się dzieje? Nie mam najgłębszego zrozumienia wewnętrznej mechaniki R, ale nie mogę znaleźć żadnej różnicy między tymi dwiema ramkami danych. Jeśli jest to istotne, dwie zmienne w ramkach są czynnikami - tymi samymi poziomami, tym samym kodowaniem numerycznym poziomów, obydwoma tylko podzbiorami tej samej oryginalnej ramki danych. Konwertowanie ich na wektory znaków nie pomaga.

Tło (ponieważ nie miałbym nic przeciwko temu): Mam zapisy dotyczące leczenia farmakologicznego pacjentów. Każdy zapis leczenia zasadniczo określa osobę i datę. Druga tabela zawiera zapis dla każdego leku i dawkę podaną podczas konkretnego leczenia (zwykle kilka leków jest podawanych w każdym leczeniu). Próbuję zidentyfikować ciągłe okresy, podczas których osoba brała te same kombinacje leków w tych samych dawkach.

Najlepszym planem, jaki wymyśliłem, jest sprawdzenie leczenia w kolejności chronologicznej. Jeśli kombinacja leków i dawek w leczeniu [i] jest identyczna z kombinacją w leczeniu [i-1], wówczas leczenie [i] jest częścią tej samej fazy co leczenie [i-1]. Oczywiście, jeśli nie mogę porównać kombinacji leków i dawek, to się właśnie okazuje.

+2

Gdybyś mógł zamieścić przykładową parę ramek danych, pomógłby - najlepiej w wyniku uruchomienia 'dput()' na ramkach. – Sharpie

+0

Sharpie wygrywa. Dwie ramki danych nadal nosiły nazwę row.names głównej ramki danych, która pojawia się w dput(), ale nie str(). Sharpie, jeśli napiszesz jako odpowiedź, zaznaczę to najlepiej. –

+0

Jestem naprawdę zaskoczony - zawsze myślałem, że 'str' jest" uświęconą "wersją' dput'. Chyba się okazuje, że to tylko podsumowanie. – Sharpie

Odpowiedz

6

No cóż, zatracony okrzyk "Specyficznego mola"! może wygrać w tym przypadku:

Sprawdź wyjście dput() i opublikuj, jeśli to możliwe. str() właśnie podsumowuje zawartość obiektu, podczas gdy dput() zrzuca wszystkie krwawe szczegóły w formie, która może zostać skopiowana i wklejona do innego interpretera języka R w celu ponownego wygenerowania obiektu.

6

Ogólnie rzecz biorąc, w tej sytuacji warto wypróbować all.equal, która zawiera informacje o tym, dlaczego dwa obiekty nie są równoważne.

+0

Próbowałem tego i otrzymałem dość tajemniczy '" Atrybuty: "', co doprowadziło mnie do str() ramek danych - ale "Atrybuty: Komponent 2" nie naprawdę prowadzą mnie do numerów wierszy. –

+0

Cóż, różne atrybuty sugerują, patrząc na "atrybuty" ... – hadley

Powiązane problemy