Thật vậy, như đã được đề cập ở trên (và những nơi khác trên SO), để chuyển đổi chuỗi thành ngày, bạn cần một ngày cụ thể trong tháng. Từ as.Date()
trang hướng dẫn sử dụng:
Nếu chuỗi ngày không chỉ định ngày hoàn toàn, câu trả lời được trả về có thể thuộc về hệ thống cụ thể. Hành vi phổ biến nhất là cho rằng một năm, tháng hoặc ngày còn thiếu là năm hiện tại. Nếu nó chỉ định ngày không chính xác, các triển khai đáng tin cậy sẽ xuất hiện lỗi và ngày được báo cáo là NA. Thật không may, một số triển khai phổ biến (chẳng hạn như glibc
) không đáng tin cậy và đoán theo ý nghĩa dự định.
Một giải pháp đơn giản sẽ là dán ngày "01"
vào mỗi ngày và sử dụng strptime()
để chỉ ngày đó là ngày đầu tiên của tháng đó.
Đối với những người tìm kiếm thêm một chút thông tin cơ bản về ngày và giờ xử lý trong R:
Trong R, thời gian sử dụng POSIXct
và POSIXlt
các lớp và ngày tháng sử dụng Date
lớp.
Ngày được lưu trữ dưới dạng số ngày kể từ ngày 1 tháng 1 năm 1970 và thời gian được lưu trữ dưới dạng số giây kể từ ngày 1 tháng 1 năm 1970.
Ví dụ:
d <- as.Date("1971-01-01")
unclass(d)
pct <- Sys.time()
unclass(pct)
plt <- as.POSIXlt(pct)
up <- unclass(plt)
names(up)
up$hour
Để thực hiện các hoạt động vào ngày và giờ:
plt - as.POSIXlt(d)
Và để xử lý ngày tháng, bạn có thể sử dụng strptime()
(mượn các ví dụ này từ trang hướng dẫn):
strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS")
dates <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
strptime(dates, "%d%b%Y")