如果我将日期10.10.61(DD.MM.YY)转换为as.Date(date, format="%d.%m.%y"),由于某种原因,它将其转换为2061**-10-10。有没有一个优雅的方法来纠正这个问题,或者我必须手动地通过切片字符串并在前面添加“19”来纠正这个问题?我也尝试了 * 动物园 * 包,带来了相同的(错误的)结果。
10.10.61
as.Date(date, format="%d.%m.%y")
r8xiu3jd1#
x = format(as.Date("10.10.61", "%d.%m.%y"), "19%y-%m-%d") x = as.Date(x) x class(x)
yebdmbv42#
请注意,一个sub将对字符串进行切片,并在year前面加上19,这样就不那么麻烦了:
sub
as.Date(sub("(..)$", "19\\1", date), "%d.%m.%Y") ## [1] "1961-10-10"
chron另外,chron包默认的截止值为30,因此默认使用1961:
library(chron) as.Date(dates(date, format = "d.m.y")) ## [1] "1961-10-10"
在chron中,年份扩展规则由"chron.year.expand"选项定义,默认情况下,该选项设置为year.expand函数,该函数的默认值cut.off为30。查看此SO帖子以获取更多信息:Add correct century to dates with year provided as "Year without century", %y
"chron.year.expand"
year.expand
cut.off
mum43rcc3#
如果你所有的日期都在1900年,那么你可以使用这个解决方案:
library(magrittr) your_date = '10.10.61' as.Date(your_date,format="%d.%m.%y") %>% format("19%y%m%d") %>% as.Date("%Y%m%d")
lymnna714#
如果你所有的日期都是过去的,但有些是在2000年(如生日),你可以使用这个解决方案:
origDates = c('10.10.61','10.10.01') badDates = as.Date(origDates,'%d.%m.%y') badDates ## [1] "2061-10-10" "2001-10-10" goodDates = ifelse(badDates > Sys.Date(), format(badDates,'19%y-%m-%d'), format(badDates,'%Y-%m-%d')) newDates = as.Date(goodDates) newDates ## [1] "1961-10-10" "2001-10-10"
4条答案
按热度按时间r8xiu3jd1#
yebdmbv42#
请注意,一个
sub
将对字符串进行切片,并在year前面加上19,这样就不那么麻烦了:chron另外,chron包默认的截止值为30,因此默认使用1961:
在chron中,年份扩展规则由
"chron.year.expand"
选项定义,默认情况下,该选项设置为year.expand
函数,该函数的默认值cut.off
为30。查看此SO帖子以获取更多信息:Add correct century to dates with year provided as "Year without century", %ymum43rcc3#
如果你所有的日期都在1900年,那么你可以使用这个解决方案:
lymnna714#
如果你所有的日期都是过去的,但有些是在2000年(如生日),你可以使用这个解决方案: