因此,我有这个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具有一个变量(日期),该变量具有唯一的日期列表以及每天有多少个不同的动作。
答案 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