我正在尝试计算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 ......我不知道该怎么做!
谢谢!
答案 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")