Участок в соответствии с количеством строк во временных рядах - PullRequest
0 голосов
/ 07 июня 2018

У меня есть таблица, включающая два столбца, а именно дата и имя пользователя , и я хотел бы построить график количества записей каждого пользователя по дням или месяцам в 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 
.      .
.      .
.      .

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

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

1 Ответ

0 голосов
/ 08 июня 2018

Как всегда, будут полезны воспроизводимые данные с использованием 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) 

enter image description here

...