使用plyr包ddply函数统计每日数据时如何忽略时间仅按年月日分组
解决方法
你遇到的问题根源是Timestamp为带时分秒的POSIXct时间类型,ddply默认会按精确到秒的时间值分组,只要把分组维度转为仅保留年月日的日期类型即可解决,两种实现方式如下:
方式1:直接在分组参数中转换
不需要修改原始数据框,直接在分组变量处调用as.Date()处理时间戳:
# 直接转换分组维度,分组后的日期列默认名为as.Date(Timestamp) df_users_per_day <- ddply(df, ~as.Date(Timestamp), summarise, statements = length(unique(User)))
如果需要自定义分组后的日期列名,可以调整为.()的分组写法:
df_users_per_day <- ddply(df, .(Date = as.Date(Timestamp)), summarise, statements = length(unique(User)))
方式2:提前生成日期列再分组
如果后续分析也需要用到日期维度,可以先给原数据框新增日期列再分组统计:
# 新增仅保留年月日的日期列 df <- df %>% mutate(Date = as.Date(Timestamp)) # 按日期列分组统计每日独立用户数 df_users_per_day <- ddply(df, ~Date, summarise, statements = length(unique(User)))
注意事项
如果你的时间数据涉及跨时区场景,可以在as.Date()中指定时区参数避免日期计算错误,示例:
as.Date(Timestamp, tz = "Asia/Shanghai")
内容的提问来源于stack exchange,提问作者user16949460
相关产品推荐
相关产品推荐

