我正在嘗試在 R 的資料集中格式化一些日期。日期是整數值。例如,資料集中的一些日期是 10571、4786 和 82692,轉換為 1971 年 1 月 5 日;1986 年 4 月 7 日;& 1992 年 8 月 26 日。如何在 R 中將整數值更改為格式為“%Y-%m-%d”(1971-10-05、1986-04-07、1992-08-26)的日期?
uj5u.com熱心網友回復:
好的,您必須考慮整數不同長度的可能性以及日期轉換為什么。假設所有年份最后都是兩位數,并且正如您所說,在 20 世紀內,您可能會有一天或一個月有一位或兩位數。如果每個數字都有一個數字,我們會在前面加上一個“0”來輸入標準格式。如果總共有五個數字,則一個值是個位數。如您所說,日期應假定為單個數字,因此在開頭添加“0”。但是,有“10”的情況。假設月份沒有從 0 開始,那應該代表 10 月,所以將 0 添加到月份。
在整個程序中,策略是將整數分成日期、月份、年份塊,然后添加適當的數字。然后重新組合成一個字串并轉換為日期。
# case of 4 digits
case_when(
nchar(date_integer) == 4 ~
substring(date_integer, c(1,2,3), c(1,2,4)) %>%
paste0(c(0,0,19),.) %>%
paste(., collapse = "") %>%
as.Date(., format = "%m%d%Y", origin = "1970-01-01"),
# 5 digits
nchar(date_integer) == 5 ~
# This accounts for October as a special case, so prepend 0 to dat
case_when (
grepl("0", substring(date_integer, 1,2)) ~
substring(date_integer, c(1,3,4), c(2,3,5)) %>%
paste0(c("",0,19),.) %>%
paste(., collapse = "") %>%
as.Date(., format = "%m%d%Y", origin = "1970-01-01"),
# othewise add 0 to month
TRUE ~
substring(date_integer, c(1,2,4), c(1,3,5)) %>%
paste0(c(0,"",19),.) %>%
paste(., collapse = "") %>%
as.Date(., format = "%m%d%Y", origin = "1970-01-01")
) ,
nchar(date_integer) == 6 ~
substring(date_integer, c(1,3,5), c(2,4,6)) %>%
paste0(c("","",19),.) %>%
paste(., collapse = "") %>%
as.Date(., format = "%m%d%Y", origin = "1970-01-01"),
TRUE ~ as.Date(NA)
)
測驗了所有上述數字長度的變化并產生了正確的日期。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/461666.html
