簡體   English   中英

如何在R中將字符轉換為日期格式?

[英]How to convert character to Date format in R?

如何將以下字符轉換為日期格式?

YYYY.MM

我遇到一個問題,即第10個月的小數點后為零。

2012.10 

在我的輸入源數據中顯示為

2012.1

小數點后零位缺失。 如何以“日期”格式重新顯示?

由於只有yearmonth ,因此您需要在轉換為日期之前為day分配一些值。 在下面的示例中,日期被任意選擇為15

如果輸入字符

dates = c("2012.10", "2012.01")

lubridate::ymd(paste0(year_month = dates, day = "15"))
#[1] "2012-10-15" "2012-01-15"

如果輸入是數字

dates = c(2012.10, 2012.01)

do.call(c, lapply(strsplit(as.character(dates), "\\."), function(d){
    if(nchar(d[2]) == 1){
        d[2] = paste0(d[2],"0")
    }
    lubridate::ymd(paste0(year = d[1], month = d[2], day = "15"))
}))
#[1] "2012-10-15" "2012-01-15"

下面的代碼使用lubridate包中的ymd()函數和sprintf()強制以數字格式給出的日期

dates <- c(2012.1, 2012.01)

以及以字符串形式給出的日期

dates <- c("2012.1", "2012.01")

小數點左邊的部分指定年份,小數部分表示月份。

lubridate::ymd(sprintf("%.2f", as.numeric(dates)), truncated = 1L)
 [1] "2012-10-01" "2012-01-01" 

格式規范%.2f告訴sprintf()使用2個小數位。

參數truncated = 1L表示缺少一個日期元素( day ),應以默認值(該月的第一天)完成。 另外,可以在sprintf()的格式規范中直接指定月份中的某天:

lubridate::ymd(sprintf("%.2f-15", as.numeric(dates)))
 [1] "2012-10-15" "2012-01-15" 

動物園軟件包有一個"yearmon"類,用於表示年和月,沒有日。 在內部,它們將它們存儲為年+分數,其中分數= 1月為0,2月為1 / 12,3月為2/12,依此類推,但是以更好的格式打印並按預期進行排序。 假設您輸入的x是數字,請將其轉換為2位數字月份的字符,然后以適當的格式將as.yearmon應用於。

library(zoo)

x <- c(2012.1, 2012.01)  # test data

as.yearmon(sprintf("%.2f", x), "%Y.%m")
## [1] "Oct 2012" "Jan 2012"

as.Date需要,可以應用as.Date"yearmon"對象轉換為"Date"類,但通常不需要。

as.Date(as.yearmon(sprintf("%.2f", x), "%Y.%m"))
## [1] "2012-10-01" "2012-01-01"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM