按天对日期时间数据进行排序,但从下午 4 点到下午 4 点

Sort Datetime data by day, but from 4PM to 4PM

我每天都有不同时间发布的有关公司的推文,我想按天对它们进行分组。我已经这样做了。但是,我不想从 00:00 到 23:59 对它们进行排序,而是从 16:00 到 15:59 (因为纽约证券交易所的开放时间)。

推文(负面、中性和正面代表情绪):

 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-02 05:00:00+00:00,0,1,0,1
 AXP,2013-06-02 16:00:00+00:00,0,2,0,2

我的代码:

 Tweets$Datetime_UTC <- as.Date(Tweets$Datetime)
 Sent <- aggregate(list(Tweets$Negative, Tweets$Neutral, Tweets$Positive), by=list(Tweets$Company, Tweets$Datetime_UTC), sum)
 colnames(Sent) <- c("Company", "Date", "Negative", "Neutral", "Positive")
 Sent <- Sent[order(Sent$Company),]

该代码的输出:

 Company,Date,Negative,Neutral,Positive
 AXP,2013-06-01,0,4,0
 AXP,2013-06-02,0,3,0

我想要的样子(考虑到一天应该从 16:00 开始):

 Company,Date,Negative,Neutral,Positive
 AXP,2013-06-02,0,5,0
 AXP,2013-06-03,0,2,0  

如您所见,我的代码几乎可以正常工作。我只想在不同时间后排序 windows.

如何做到这一点?一个想法是只向每个 Datetime_UTC 添加 +8h,这会将 16:00 更改为 00:00。在此之后,我就可以使用我的代码了。可以吗?

提前致谢!! :-)

实际上,您所做的是重新定义从 16:00 而不是 00:00 开始的日期。一种选择是转换为纪元时间(自 1970:01:01 00:00:00+00:00 以来的秒数,然后简单地将数据向前滑动八小时。

您可以转换为纪元秒,然后加上 8 小时的秒数,然后在一行中转换回 Date class。然后你就会像以前一样聚合。

Tweets$Datetime_UTC <- as.Date(as.integer(as.POSIXct(Tweets)) + 28800)

用它替换你的第一行代码,它应该可以解决问题。