首页 文章

将日期转换为R中的as.POSIXct,它会减去两个日期

提问于
浏览
2

我正在尝试计算R中的日期 - 1(基本上是日期的前一天),当它将其转换为POSIXct时,它似乎会减去另一个日期?

该列的类型为POSIXct:

class(df$Date)
[1] "POSIXct" "POSIXt"

这是初始值:

> df[12,"Date"]
[1] "2016-03-09 EST"

如果我只是做as.Date并减去一个它工作正常:

as.Date(df[12,"Date"]-1, tz="EST")
[1] "2016-03-08"

但是我将它保存回同一列,因此它会自动转换为as.POSIXct(我认为) . 然后我在3月7日的那一栏结束 . 晚上7点 . 如果我在这里打字,我会得到这个:

as.POSIXct(as.Date(df[12,"Date"]-1, tz="EST"))
[1] "2016-03-07 19:00:00 EST"

我试过用美国/纽约作为tz . 我已经尝试了围绕df [12,“Date”]的as.Date或者包括-1的整个事件......我不知道该怎么做!

谢谢!

2 回答

  • 3

    使用 as.difftime 删除以时间为单位指定的金额 . 无论您的数据是 Date 还是 POSIXct 格式,它都能始终如一地工作 . 例如 . :

    如您所述,这会失败:

    x <- as.POSIXct(c("2016-03-09","2016-03-10"), tz="US/Eastern")
    #[1] "2016-03-09 EST" "2016-03-10 EST"
    x[1] <- as.Date(x[1]-1, tz="US/Eastern")
    #[1] "2016-03-07 19:00:00 EST" "2016-03-10 00:00:00 EST"
    

    这有效:

    x <- as.POSIXct(c("2016-03-09","2016-03-10"), tz="US/Eastern")
    #[1] "2016-03-09 EST" "2016-03-10 EST"
    x[1] <- x[1] - as.difftime(1, units="days")
    #[1] "2016-03-08 EST" "2016-03-10 EST"
    
  • 1

    如果你不想做Frank在评论中提到的话,

    您应该考虑使用 strptime 而不是 as.POSIXct

    为确保以 POSIXct 格式返回,请使用:

    strptime(df[12,"Date"]-1,tz="EST",format="%Y-%m-%d")
    

相关问题