如何在R中按天按UTC时间戳分组

时间:2019-01-24 19:38:07

标签: r dplyr utc

因此,我有这个UTC时间戳样本以及其他一些数据。我想按日期对数据进行分组。这意味着我不需要小时/分钟/秒,并且想要一个新的df来显示组合在一起的操作数。

我尝试使用lubridate提取日期,但我无法正确获取原点。

数据

hw0 <- read.table(text = 
'ID   timestamp        action
4f.. 20160305195246   visitPage
75.. 20160305195302   visitPage
77.. 20160305195312   checkin
42.. 20160305195322   checkin
8f.. 20160305195332   searchResultPage
29.. 20160305195342   checkin', header = T)

这就是我尝试过的

library(dplyr)
library(lubridate) #this will allow us to extract the date
daily <- hw0 %>%
mutate(date=date(as.POSIXct(timestamp),origin='1970-01-01'))

daily <- daily %>%
group_by(date)

我不确定将什么用作原点,并且我的错误表明此值不正确。最终,我希望代码返回一个新的df,该df具有一个变量(日期),该变量具有唯一的日期列表以及每天有多少个不同的动作。

3 个答案:

答案 0 :(得分:1)

假设末尾的数字是24小时制,则可以使用:

daily = hw0 %>% 
  mutate(date = as.POSIXct(as.character(timestamp), format = '%Y%m%d%H%M%S'))

如果要摆脱小时数,可以改用as.Date。当您提供数值参数时,需要提供原点,这被解释为距原点的天数。在您的情况下,您应该给它一个字符向量并提供日期格式。

答案 1 :(得分:1)

Lubridate还具有可以提取日期的ymd_hms()函数和可以提供帮助的floor_date()函数。

library(tidyverse)
daily <- hw0 %>%
  mutate(time = ymd_hms(timestamp, tz = 'UTC'),
         date = floor_date(time, unit = 'day'))

答案 2 :(得分:1)

lubridate也有parse_date_time,这似乎是上述两种解决方案的完美结合。

library(tidyverse)
library(lubridate)

hw0 %>% 
  mutate(timestamp = parse_date_time(timestamp, order = "%Y%m%d%H%M%S"))


    ID           timestamp           action
1 4f.. 2016-03-05 19:52:46        visitPage
2 75.. 2016-03-05 19:53:02        visitPage
3 77.. 2016-03-05 19:53:12          checkin
4 42.. 2016-03-05 19:53:22          checkin
5 8f.. 2016-03-05 19:53:32 searchResultPage
6 29.. 2016-03-05 19:53:42          checkin