[英]How to convert character to Date format in R?
如何將以下字符轉換為日期格式?
YYYY.MM
我遇到一個問題,即第10個月的小數點后為零。
2012.10
在我的輸入源數據中顯示為
2012.1
小數點后零位缺失。 如何以“日期”格式重新顯示?
由於只有year
和month
,因此您需要在轉換為日期之前為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.