通过添加 +8h 操作数据框中的日期
Manipulating a date in a data frame by adding +8h
我有一个数据框列,其日期格式为 %Y-%m-%d %H:%M:%S
。我想要做的是将 +8h 添加到每个日期,然后将格式更改为 %Y-%m-%d
,以便在 16:00 或之后的所有内容都将在第二天显示。这是我的数据框的摘录:
推文:
Company,Datetime_UTC,Negative,Neutral,Positive,Volume
AXP,2013-06-01 16:00:00+00:00,0,2,0,2
AXP,2013-06-01 17:00:00+00:00,0,2,0,2
AXP,2013-06-01 22:00:00+00:00,0,1,0,1
AXP,2013-06-02 05:00:00+00:00,0,1,0,1
我的代码:
Tweets$Datetime_UTC <- as.POSIXct(Tweets$Datetime_UTC, format='%Y-%m-%d %H:%M:%S')
Tweets$Datetime_UTC <- as.integer(Tweets$Datetime_UTC)
Tweets$Datetime_UTC <- (Tweets$Datetime_UTC + 28800) / 86400
Tweets$Datetime_UTC <- as.Date(Tweets$Datetime_UTC, origin="1970-01-01")
如你所见,我先把日期改成POSIXct,再改成整数,这样就可以操作了。之后,我加上 28800 (8h = 28800sec) 然后除以 86400 (24h = 86400sec)。然后,我把它改回日期。
期望的结果:
Company,Datetime_UTC,Negative,Neutral,Positive,Volume
AXP,2013-06-02,0,2,0,2
AXP,2013-06-02,0,2,0,2
AXP,2013-06-02,0,1,0,1
AXP,2013-06-02,0,1,0,1
实际结果:
Company,Datetime_UTC,Negative,Neutral,Positive,Volume
AXP,2013-06-01,0,2,0,2
AXP,2013-06-01,0,2,0,2
AXP,2013-06-02,0,1,0,1
AXP,2013-06-02,0,1,0,1
不知何故,前两行的日期错误,而第 3 行正确更改为 2013-06-02
。我可以改进什么以使其对每一行都能正常工作?
提前致谢!! :-)
我不认为你需要经历整个过程,像下面这样简单的事情行得通吗?注意我已经做了 Tweets$Datetime_UTC <- as.POSIXct(Tweets$Datetime_UTC, format='%Y-%m-%d %H:%M:%S')
Tweets$Datetime_UTC <- as.Date(Tweets$Datetime_UTC + 28800)
Tweets
#Company Datetime_UTC Negative Neutral Positive Volume
#1 AXP 2013-06-02 0 2 0 2
#2 AXP 2013-06-02 0 2 0 2
#3 AXP 2013-06-02 0 1 0 1
#4 AXP 2013-06-02 0 1 0 1
您可以使用包 lubridate
并执行:
library(lubridate)
z$Datetime_UTC = as.Date(as.POSIXct( z$Datetime_UTC) + hm("8:00") )
> z$Datetime_UTC
[1] "2013-06-02" "2013-06-02" "2013-06-02" "2013-06-02"
其中 z
是您的数据框。
我有一个数据框列,其日期格式为 %Y-%m-%d %H:%M:%S
。我想要做的是将 +8h 添加到每个日期,然后将格式更改为 %Y-%m-%d
,以便在 16:00 或之后的所有内容都将在第二天显示。这是我的数据框的摘录:
推文:
Company,Datetime_UTC,Negative,Neutral,Positive,Volume
AXP,2013-06-01 16:00:00+00:00,0,2,0,2
AXP,2013-06-01 17:00:00+00:00,0,2,0,2
AXP,2013-06-01 22:00:00+00:00,0,1,0,1
AXP,2013-06-02 05:00:00+00:00,0,1,0,1
我的代码:
Tweets$Datetime_UTC <- as.POSIXct(Tweets$Datetime_UTC, format='%Y-%m-%d %H:%M:%S')
Tweets$Datetime_UTC <- as.integer(Tweets$Datetime_UTC)
Tweets$Datetime_UTC <- (Tweets$Datetime_UTC + 28800) / 86400
Tweets$Datetime_UTC <- as.Date(Tweets$Datetime_UTC, origin="1970-01-01")
如你所见,我先把日期改成POSIXct,再改成整数,这样就可以操作了。之后,我加上 28800 (8h = 28800sec) 然后除以 86400 (24h = 86400sec)。然后,我把它改回日期。
期望的结果:
Company,Datetime_UTC,Negative,Neutral,Positive,Volume
AXP,2013-06-02,0,2,0,2
AXP,2013-06-02,0,2,0,2
AXP,2013-06-02,0,1,0,1
AXP,2013-06-02,0,1,0,1
实际结果:
Company,Datetime_UTC,Negative,Neutral,Positive,Volume
AXP,2013-06-01,0,2,0,2
AXP,2013-06-01,0,2,0,2
AXP,2013-06-02,0,1,0,1
AXP,2013-06-02,0,1,0,1
不知何故,前两行的日期错误,而第 3 行正确更改为 2013-06-02
。我可以改进什么以使其对每一行都能正常工作?
提前致谢!! :-)
我不认为你需要经历整个过程,像下面这样简单的事情行得通吗?注意我已经做了 Tweets$Datetime_UTC <- as.POSIXct(Tweets$Datetime_UTC, format='%Y-%m-%d %H:%M:%S')
Tweets$Datetime_UTC <- as.Date(Tweets$Datetime_UTC + 28800)
Tweets
#Company Datetime_UTC Negative Neutral Positive Volume
#1 AXP 2013-06-02 0 2 0 2
#2 AXP 2013-06-02 0 2 0 2
#3 AXP 2013-06-02 0 1 0 1
#4 AXP 2013-06-02 0 1 0 1
您可以使用包 lubridate
并执行:
library(lubridate)
z$Datetime_UTC = as.Date(as.POSIXct( z$Datetime_UTC) + hm("8:00") )
> z$Datetime_UTC
[1] "2013-06-02" "2013-06-02" "2013-06-02" "2013-06-02"
其中 z
是您的数据框。