[英]How to convert integer to date format in R?
我正在嘗試將R中的數據幀中的整數數據轉換為日期格式。
數據在orig_svcg_filtered數據幀內名為svcg_cycle的列下。
原始數據看起來像200502、200503等,我希望將其轉換為yyyy-mm-dd格式。
我正在嘗試使用以下代碼:
as.Date(orig_svcg_filtered$svcg_cycle, origin = "2000-01-01")
但是輸出不是我期望的:
[1] "2548-12-15" "2548-12-15" "2548-12-15" "2548-12-15" "2548-12-15"
而應該是2005-02-01、2005-03-01等。
如何解決呢?
如果你有
x <- c(200502, 200503)
然后
as.Date(x, origin = "2000-01-01")
告訴R您想要2000-01-01之后的200,502和200,503天。 從help("as.Date")
:
as.Date將接受數字數據(自一個紀元以來的天數),但僅在提供了origin的情況下。
因此,整數數據給出的是提供的原點后的天數,而不是日期的某種數字代碼,例如“ 2005-02-01”的200502。
你想要的是
as.Date(paste(substr(x, 1, 4), substr(x, 5, 6), "01", sep = "-"))
# [1] "2005-02-01" "2005-03-01"
該
paste(substr(x, 1, 4), substr(x, 5, 6), "01", sep = "-")
部分接受您的整數並創建類似的字符串
# [1] "2005-02-01" "2005-03-01"
然后as.Date()
知道如何處理它們。
您可以選擇做類似的事情
as.Date(paste0(x, "01"), format = "%Y%m%d")
# [1] "2005-02-01" "2005-03-01"
這只是在每個元素上(當天)粘貼"01"
,轉換為字符,然后告訴as.Date()
將日期讀入的格式。 (請參閱help("as.Date")
和help("strptime")
)。
我喜歡使用Regex來解決這類字符串格式問題。 默認情況下, as.Date
僅檢查幾種標准日期格式,例如YYYY-MM-DD。 當您有一個整數日期(即距某個參考點的秒數)時,將使用origin
,但是在這種情況下,您的日期實際上不是整數日期,而只是一個格式化為整數字符串的日期。
我們只需用破折號將月份和日期分開,然后添加一天(在這種情況下是月份的第一天)以使其成為有效日期(您必須有一天將其存儲為R中的日期對象)。 正則表達式位捕獲組1中的前4位和組2中的后兩位。 然后,我們將用破折號分隔的兩組與日期合並在一起。
as.Date(gsub("^(\\d{4})(\\d{2})", "\\1-\\2-01", x))
[1] "2005-02-01" "2005-03-01"
在這種情況下,您無需指定format
,因為YYYY-MM-DD是as.Date
檢查的標准格式as.Date
,但是format參數為format = "%Y-%m-%d"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.