2011-07-29 24 views
11

Tôi có thể làm điều gì đó ngu ngốc và không nhìn thấy nó, nhưng:R strptime Năm và Tháng với Không Delimiter trở NA

> strptime("201101","%Y%m") 
[1] NA 

Từ sự giúp đỡ strptime:

% Y Năm với thế kỷ
% m Tháng dưới dạng số thập phân (01–12)

+0

Bạn đã tìm thấy lỗi tài liệu với * 'strptime' * mà ngày-tháng-ngày tất cả phải được cung cấp, không bao giờ được nêu ở bất kỳ đâu: *" Đối với strptime chuỗi đầu vào không cần chỉ định ngày hoàn toàn: giả định rằng không xác định giây, phút hoặc giờ bằng không, và năm, tháng hoặc ngày không xác định là hiện tại. "* – smci

Trả lời

12

Chỉ cần dán trường ngày (giả sử "01") mà bạn bỏ qua:

R> shortdate <- "201101" 
R> as.Date(paste(shortdate, "01", sep=""), "%Y%m%d") 
[1] "2011-01-01" 
R> 

Tôi thích as.Date() cho các ngày và strptime() cho các đối tượng POSIXct, tức là ngày và giờ.

Sau đó bạn có thể chuyển đổi các phân tích cú pháp Date đối tượng vào một đối tượng POSIXlt để lấy năm và tháng:

R> mydt <- as.Date(paste(shortdate, "01", sep=""), "%Y%m%d") 
R> myp <- as.POSIXlt(mydt) 
R> c(myp$year, myp$mon) 
[1] 111 0 
R> 

Đây là hành vi POSIX tiêu chuẩn với năm như "Năm - 1900" và tháng như zero-lập chỉ mục.

+0

vì vậy trong R bạn không thể nói rằng không có chữ số ngày, bạn phải tiêm giả định là 01. lạ. – userJT

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