我使用R分析应用数据,我发现自己必须按时间分组,所以我可以在ggplot中绘制它,但这看起来并不容易。
我的数据如下:
user_id | session_id | timestamp | time_seconds
001 | 123 | 2014-01-01| 251
002 | 845 | 2014-01-01| 514
003 | 741 | 2014-01-02| 141
003 | 477 | 2014-01-03| 221
004 | 121 | 2014-01-03| 120
005 | 921 | 2014-01-04| 60
...
time_stamp列的格式为as.Date()
,因此应将其识别为R的日期。
我需要绘制显示否的线图。在ggplot中随着时间的推移。有没有一种简单的方法在ggplot代码中执行此操作?例如:
ggplot(df, aes(timestamp,count(session_id)))+
geom_line()
我想在每个日期进行一次会话计数,上面的代码不起作用,只是一个展示我之后的例子。
我还想做的是按月总结。我也想研究特定月份,并希望对数据进行分组。这可以从那行代码完成吗? xlim
不是我之后的事情,只是"缩短"轴。
我尝试使用aggregate
功能,但结果好坏参半,而不是我真正想要的。
感谢。
答案 0 :(得分:1)
您可以使用group_by
包中的summarize
和dplyr
:
library(dplyr)
library(ggplot2)
df %>%
group_by(timestamp) %>%
summarise(session_count = n()) %>%
ggplot(aes(timestamp, session_count)) +
geom_line()
按月汇总数据,您可以:
df %>%
mutate(month_timestamp = format(timestamp, "%b %Y")) %>%
group_by(month_timestamp) %>%
summarise(session_count = n()) %>%
ggplot(aes(month_timestamp, session_count)) +
geom_line()
这里的情节并没有显示出来,因为您的数据只有一个月。
数据强>
df <- structure(list(user_id = c("001", "002", "003", "003", "004", "005"),
session_id = c("123", "845", "741", "477", "121", "921"),
timestamp = structure(c(16071, 16071, 16072, 16073, 16073, 16074),
class = "Date"),
time_seconds = c(251, 514, 141, 221, 120, 60)),
.Names = c("user_id", "session_id", "timestamp", "time_seconds"),
class = c("tbl_df", "tbl", "data.frame"),
row.names = c(NA, -6L))
答案 1 :(得分:0)
也许可以方便地使用lubridate,例如
library(tidyverse)
dat <- data.frame(timestamp = rep(seq.Date(as.Date("2014/01/01"), as.Date("2014/12/24"), "day"), each = 2),
sessions = 1)
dat %>%
mutate(month = format(timestamp, "%Y-%m")) %>%
group_by(month) %>%
summarise(sum_session = sum(sessions)) %>%
ggplot(data = e, aes(x = month, y = sum_session, group = 1)) + geom_line()