【问题标题】:Plot according to row count in time series根据时间序列中的行数绘制
【发布时间】:2018-11-17 14:46:49
【问题描述】:

我有一个包含两列的表,即 dateusername,我想在 R 上按天或月绘制每个用户记录的计数。

有没有办法直接做呢?

我的桌子;

User   Time
a      2016-05-02 03:45:11 
b      2016-05-05 04:05:24 
b      2016-06-05 07:23:16 
c      2016-05-08 08:37:37 
d      2016-05-09 11:28:15 
c      2016-08-11 23:41:18 
c      2016-05-11 03:51:14 
b      2016-05-11 06:16:21 
b      2016-07-15 20:23:35 
a      2016-05-16 06:42:53 
a      2016-05-17 08:52:24 
a      2016-05-18 09:35:47 
a      2016-05-19 03:24:39 
d      2016-07-12 06:39:26 
.      .
.      .
.      .

我想在同一图中显示每个用户在一段时间内的活动水平,以比较每个用户。它可以是折线图,也可以是您认为更好的另一种类型的图。

这个问题太基础了,但到目前为止我还没有找到任何直接的解决方案。还请考虑我是新手。

【问题讨论】:

  • 共有三种绘图范式(base、lattice、ggplot2)和几个数据管理范式。这似乎相当基本,您确实应该编辑您的问题,以便有一个特定的 R 对象可以使用。我们无法判断您是否真的有 R Date 对象或因子变量。与此同时,由于不清楚,我投票结束,但如果你编辑更具体,我很乐意撤销投票。示例构造是您的责任。

标签: r plot group-by time-series row


【解决方案1】:

与往常一样,使用 dput 和预期输出的可重现数据将很有帮助。但是,根据您的数据,这是我最好的镜头。但是,需要更好的可视化。

df <- structure(list(User = structure(c(1L, 2L, 2L, 3L, 4L, 3L, 3L, 
2L, 2L, 1L, 1L, 1L, 1L, 4L), .Label = c("a", "b", "c", "d"), class = "factor"), 
Time = c("2016-05-02 03:45:11", "2016-05-05 04:05:24", "2016-06-05 07:23:16", 
"2016-05-08 08:37:37", "2016-05-09 11:28:15", "2016-08-11 23:41:18", 
"2016-05-11 03:51:14", "2016-05-11 06:16:21", "2016-07-15 20:23:35", 
"2016-05-16 06:42:53", "2016-05-17 08:52:24", "2016-05-18 09:35:47", 
"2016-05-19 03:24:39", "2016-07-12 06:39:26")), .Names = c("User", 
"Time"), row.names = c("1", "2", "3", "4", "5", "6", "7", "8", 
"9", "10", "11", "12", "13", "14"), class = "data.frame")


library(tidyverse)
library(lubridate)
df_clean <- df %>% group_by(User, hour(Time)) %>%     #To prepare for calculating User per hour, For day use day() function from lubridate
mutate(n = n()) %>% distinct(User,n) %>%              #Remove duplicted users
ungroup() %>%  group_by(`hour(Time)`) %>% mutate(label_ypos=cumsum(n) - 0.5*n)      #Labels positions on the graph

ggplot(data=df_clean, aes(x=`hour(Time)`, y=n, fill=User)) +
 geom_bar(stat="identity",position = position_stack(reverse = TRUE)) +
 geom_text(aes(y=label_ypos, label=n), vjust=.5, 
        color="white", size=3.5) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多