2010-09-22 33 views
7

Tôi có một biến được gọi là Started là ngày mà đối tượng con người đăng ký vào nghiên cứu và một biến khác gọi là dos1 là ngày mà chủ đề cuối cùng được phẫu thuật. Tôi muốn làm việc trong bao nhiêu tháng kể từ lần phẫu thuật cuối cùng của họ đến ngày ghi danh. Tôi cố gắng:Phép trừ lubridate chỉ trả về giá trị số

as.period(syrrupan$Started-syrrupan$dos1,units=c("month")) 

tôi mong đợi này để cung cấp cho tôi một cái gì đó như:

14, 18, 1, 26 

Với mỗi số là số tháng.

Thay vào đó tôi nhận được:

1 year, -4 months, -5 days and -1 hours 1 year, -5 months, -23 days and -1 hours 1 year, -7 months, 2 days and -1 hours 1 year, -8 months, -28 days and 1 hour 1 year, -7 months, -23 days and 1 hour. 

Làm thế nào tôi có thể nhận được chỉ là những giá trị số của tháng?

Trả lời

14

Bạn có thể thử sử dụng difftime thay vào đó, ví dụ:

difftime(syrrupan$Started,syrrupan$dos1,units="days") 

Lưu ý rằng điều này sẽ cung cấp cho bạn một đối tượng của lớp difftime, nếu bạn muốn có một vector số, quấn một as.numeric xung quanh nó. Cũng lưu ý rằng bạn không thể chọn tháng làm tùy chọn cho các đơn vị, nhưng bạn thực sự nên gắn bó với một đơn vị thời gian có độ dài cố định.

+2

Trong trường hợp đó, bạn chỉ có thể chia kết quả ở trên là 30,44. – James

+0

difftime là từ gói cơ sở. Kể từ khi các cột là "Ngày" tôi cũng có thể chỉ cần nhập syrrupan $ Bắt đầu-syrrupan $ dos1 mà tạo ra một vector của lớp "difftime" trong ngày. Bằng cách này, cú pháp của difftime không cho phép dấu trừ, thay vì nó chỉ là dấu phẩy. Để có được tháng và chỉ có một giá trị đáng kể sau số thập phân tôi đã sử dụng tròn (as.numeric (difftime (syrrupan $ Started, syrrupan $ dos1, units = "days"))/30.44,1). Trong lubridate tôi đã có thể làm tròn này (as.numeric (as.duration (syrrupan $ Started-syrrupan $ dos1))/60/60/24/30.44,1) mà có vẻ như là một điều khó hiểu. – Farrel

+0

Xin lỗi, có dấu trừ trong khi tôi sao chép tên biến của bạn từ câu hỏi. Tôi đã sửa câu trả lời ngay bây giờ. – James

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