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

时间:2016-06-14 20:33:18

标签: r date datetime

我正在尝试计算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"

我已经尝试过使用America / New York作为tz。我已经尝试了围绕df [12,“Date”]的as.Date或整个事情,包括-1 ......我不知道该怎么做!

谢谢!

2 个答案:

答案 0 :(得分:3)

使用as.difftime取走以时间为单位指定的金额。无论您的数据是Date还是POSIXct格式,它都能始终如一地运作。 E.g:

如您描述的那样失败:

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 :(得分:1)

如果您不想做Frank在评论中提到的内容,

您应该考虑使用strptime代替as.POSIXct

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

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