2010-04-22 29 views
5

Tôi có hai khung dữ liệu nhỏ, this_txlast_tx. Họ, theo mọi cách mà tôi có thể nói, hoàn toàn giống hệt nhau. this_tx == last_tx kết quả trong một khung có kích thước giống nhau, tất cả TRUE. this_tx %in% last_tx, hai TRUEs. Kiểm tra trực quan, rõ ràng giống hệt nhau. Nhưng khi tôi gọiĐiều gì làm cho hai khung dữ liệu R này không giống nhau?

identical(this_tx, last_tx)

tôi nhận được một FALSE. Hilariously, thậm chí

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

sẽ trả về một TRUE. Nếu tôi đặt this_tx <- last_tx, tôi sẽ nhận được TRUE.

Điều gì đang xảy ra? Tôi không có sự hiểu biết sâu sắc nhất về cơ chế bên trong của R, nhưng tôi không thể tìm thấy một sự khác biệt duy nhất giữa hai khung dữ liệu. Nếu nó có liên quan, hai biến trong các khung là cả hai yếu tố - cùng cấp, cùng mã hóa số cho các cấp, cả hai chỉ là tập hợp con của cùng một khung dữ liệu gốc. Chuyển đổi chúng thành các vectơ ký tự không giúp ích gì.

Bối cảnh (vì tôi cũng không ngại giúp đỡ về điều này): Tôi có hồ sơ về các phương pháp điều trị bằng thuốc dành cho bệnh nhân. Mỗi hồ sơ điều trị về cơ bản chỉ định một người và một ngày. Một bảng thứ hai có một hồ sơ cho mỗi loại thuốc và liều được đưa ra trong một điều trị cụ thể (thông thường, một vài loại thuốc được cho mỗi lần điều trị). Tôi đang cố gắng xác định các giai đoạn liền kề trong đó người đó đang dùng cùng một loại thuốc kết hợp với liều lượng tương tự.

Kế hoạch tốt nhất mà tôi đã đưa ra là kiểm tra các phương pháp điều trị theo thứ tự thời gian. Nếu kết hợp thuốc và liều điều trị [i] giống hệt với phối hợp điều trị [i-1] thì việc điều trị [i] là một phần của cùng giai đoạn với điều trị [i-1]. Tất nhiên, nếu tôi không thể so sánh kết hợp thuốc/liều, điều đó đúng.

+2

Nếu bạn có thể đăng một cặp khung dữ liệu ví dụ, điều này sẽ giúp ích hơn là kết quả của việc chạy 'dput()' trên các khung. – Sharpie

+0

Sharpie thắng. Hai khung dữ liệu vẫn mang theo hàng.names của khung dữ liệu mẹ, hiển thị trong một dput() nhưng không phải str(). Sharpie, nếu bạn đăng câu trả lời, tôi sẽ đánh dấu nó là tốt nhất. –

+0

Tôi thực sự ngạc nhiên - tôi luôn nghĩ rằng 'str' là một phiên bản" prettified "của' dput'. Đoán nó chỉ ra rằng nó chỉ là một bản tóm tắt. – Sharpie

Trả lời

6

Vâng, tiếng kêu khó chịu của "đặc trưng của moar plz!" có thể thắng trong trường hợp này:

Kiểm tra kết quả của dput() và đăng nếu có thể. str() chỉ tóm tắt nội dung của một đối tượng trong khi dput() loại bỏ tất cả các chi tiết đẫm máu trong một biểu mẫu có thể được sao chép và dán vào một trình thông dịch R khác để tạo lại đối tượng.

6

Nói chung, trong trường hợp này, hãy thử all.equal để cung cấp cho bạn một số thông tin về lý do hai đối tượng không tương đương.

+0

Tôi đã thử điều này và có một thuộc tính 'khó hiểu ': " ', điều đã dẫn tôi đến str() các khung dữ liệu - nhưng" Thuộc tính: Thành phần 2 "không thực sự dẫn tôi đến số hàng. –

+0

Vâng, các thuộc tính khác nhau sẽ gợi ý xem 'thuộc tính' ... – hadley

Các vấn đề liên quan