我正在玩R中的日期时间,并且无法弄清楚如何改变时间来源以接受较旧的日期。例如:
vals <- as.character(60:70)
as.POSIXct(vals, origin="1900-01-01", format = "%y")
# [1] "2060-07-25 EDT" "2061-07-25 EDT" "2062-07-25 EDT" "2063-07-25 EDT"
# [5] "2064-07-25 EDT" "2065-07-25 EDT" "2066-07-25 EDT" "2067-07-25 EDT"
# [9] "2068-07-25 EDT" "1969-07-25 EDT" "1970-07-25 EDT"
是否可以调整原点,以便as.POSIXct
将返回1960以输入&#34; 60&#34;?处理模糊世纪的最佳方法是什么?
答案 0 :(得分:1)
as.POSIXct
的输入无法让"60"
返回1960。见?strptime
:
‘%y’ Year without century (00-99). On input, values 00 to 68 are
prefixed by 20 and 69 to 99 by 19 - that is the behaviour
specified by the 2004 and 2008 POSIX standards, but they do
also say ‘it is expected that in a future version the default
century inferred from a 2-digit year will change’.
如果您想要"%Y"
的不同行为,则需要在字符串前加上世纪并使用as.POSIXct
格式。
vals <- as.character(60:70)
as.POSIXct(paste0("19",vals), format = "%Y")
如果两位数的某些日期在2000之后,您可以使用ifelse
或类似的东西来预设不同的世纪。
newvals <- paste0(ifelse(vals < "20", "20", "19"), vals)
答案 1 :(得分:1)
假设您可能希望某些年份大于2000年,可能不希望在向量前面加上19。
在这种情况下,减去100年可能会更好。
library(lubridate)
vals <- as.character(60:70)
vals <- as.POSIXct(vals, origin="1900-01-01", format = "%y")
vals[year(vals)>2059] <- vals[year(vals)>2059] - years(100)
vals
[1] "1960-07-25 CDT" "1961-07-25 CDT" "1962-07-25 CDT"
[4] "1963-07-25 CDT" "1964-07-25 CDT" "1965-07-25 CDT"
[7] "1966-07-25 CDT" "1967-07-25 CDT" "1968-07-25 CDT"
[10] "1969-07-25 CDT" "1970-07-25 CDT"