Группировка в R по метке времени - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть фрейм данных со следующими столбцами:

Timestamp - POSIXct
Number of users - integer
number of schools - integer
country code - factor

Screenshot

Я хотел бы создать новый столбец для всего фрейма данных, группирующегосумма количества пользователей по метке времени, а также по коду страны.Так, например, для отметки времени A (2019-03-01) общее число пользователей для страны x равно ..., а для страны y - ....

Я пытался использовать пакет dplyr, особенно функцию mutate, но каким-то образом это могло не сработать.

Я пытался использовать ggplot и аргумент stat_summary, но каким-то образом ggplot показывает мне не общую сумму, а количество пользователей в стране на отметку времени.

Пример выходного сигнала dput следующий:

structure(list(date_intervall = structure(c(1559340000, 1559340000, 
1559340000, 1559340000, 1561932000, 1561932000, 1561932000, 1561932000, 
1561932000, 1561932000, 1561932000, 1564610400, 1564610400, 1564610400, 
1564610400, 1564610400, 1564610400, 1564610400, 1567288800, 1567288800, 
1567288800, 1567288800, 1567288800, 1567288800, 1567288800), class = c("POSIXct", 
"POSIXt"), tzone = ""), number_of_students = c(28470L, 28L, 54L, 
754L, 1376L, 2299L, 2632L, 28470L, 28L, 68L, 1003L, 1380L, 2299L, 
3584L, 28470L, 28L, 69L, 1003L, 1384L, 2350L, 5078L, 28470L, 
28L, 72L, 1003L), number_of_schools = c(66L, 1L, 2L, 1L, 6L, 
4L, 10L, 66L, 1L, 3L, 1L, 6L, 4L, 15L, 66L, 1L, 3L, 1L, 6L, 4L, 
22L, 66L, 1L, 3L, 1L), country_code = structure(c(3L, 3L, 4L, 
5L, 1L, 2L, 2L, 3L, 3L, 4L, 5L, 1L, 2L, 2L, 3L, 3L, 4L, 5L, 1L, 
2L, 2L, 3L, 3L, 4L, 5L), .Label = c("AU", "ID", "PL", "SG", "VN"
), class = "factor")), row.names = 86:110, class = "data.frame")

1 Ответ

0 голосов
/ 25 сентября 2019

Я все еще не понимаю вопроса, но попробуйте следующее.

Сначала загрузите необходимые пакеты.

library(dplyr)
library(ggplot2)

Теперь, если вы хотите новый столбец в исходном наборе данных, используйте mutate, а не summarise и присвойте результат обратнона d.

d <- d %>%
  group_by(date_intervall, country_code) %>%
  mutate(total_students = sum(number_of_students))

Чтобы построить итоги, используйте summarise и трубу к ggplot.Обратите внимание, что я строю график с geom_col, а не geom_bar.

d %>%
  group_by(date_intervall, country_code) %>%
  summarise(total_students = sum(number_of_students)) %>%
  ggplot(aes(x = date_intervall, y = total_students, fill = country_code)) + 
  geom_col()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...