Как сгруппировать по отметке времени в UTC по дням в R - PullRequest
0 голосов
/ 24 января 2019

Итак, у меня есть образец меток времени 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, который содержит переменную (date) со списком уникальных дат, а также количество различных действий, выполняемых в каждый день.

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Lubridate также имеет функцию ymd_hms(), которая может извлекать дату, и функцию floor_date(), которая может помочь.

library(tidyverse)
daily <- hw0 %>%
  mutate(time = ymd_hms(timestamp, tz = 'UTC'),
         date = floor_date(time, unit = 'day'))
0 голосов
/ 25 января 2019

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
0 голосов
/ 24 января 2019

Предполагая, что числа в конце основаны на 24-часовом времени, вы можете использовать:

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

Вместо этого вы можете использовать as.Date, если хотите избавиться от часового времени.Вам нужно указать источник, когда вы дадите числовой аргумент, который интерпретируется как количество дней с начала источника.В вашем случае вы должны просто дать ему символьный вектор и указать формат даты.

...