Как создать фрейм данных, объединяющий ежедневные номера билетов в месячный счет? - PullRequest
2 голосов
/ 20 июня 2019

У меня есть список номеров билетов на каждую дату.Столбец даты преобразуется в данные, но столбец номера билета представляет собой текст.

Created       Ticket
01-Jan-19   a1
02-Jan-19   a2
03-Jan-19   a3
04-Jan-19   a4
05-Jan-19   a5
06-Jan-19   a6
07-Jan-19   a7
08-Jan-19   a8
09-Jan-19   a9
10-Jan-19   a10
11-Jan-19   a11
12-Jan-19   a12
13-Jan-19   a13
14-Jan-19   a14
15-Jan-19   a15
16-Jan-19   a16
17-Jan-19   a17
18-Jan-19   a18
19-Jan-19   a19
01-Feb-19   a20
02-Feb-19   a21
03-Feb-19   a22
04-Feb-19   a23

Пытался использовать данные пола в R, но поскольку столбец номера билета является символьным, я не могу его использовать.

data <- read.csv(file = 'D:\\DS Data\\SampleTickets.csv', stringsAsFactors = FALSE,header = TRUE)

str(data)
library(readr)
library(lubridate)
library(dplyr)

data <- data %>%
  mutate(Created = dmy(Created))

data %>% group_by(month=floor_date(Created, "month")) %>%
  summarize(amount=sum(Ticket))

Я ожидаю вывода кадра данных, как ..

CreatedMonth     CountOfTickets
1/1/2019             18
1/2/2019              4

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Вы были почти там: просто используйте n() вместо sum(Ticket) для подсчета количества строк:

library(dplyr)
library(lubridate)
data %>%
  mutate(Created = dmy(Created)) %>%
  group_by(month = floor_date(Created, "month")) %>%
  summarize(amount = n())
# A tibble: 2 x 2
  month      amount
  <date>      <int>
1 2019-01-01     19
2 2019-02-01      4

Однако есть ярлык, который использует count():

data %>% 
  count(CreatedMonth = dmy(Created) %>% floor_date("month"))
# A tibble: 2 x 2
  CreatedMonth     n
  <date>       <int>
1 2019-01-01      19
2 2019-02-01       4

Для полноты, вот также версия data.table:

library(lubridate)
library(data.table)
setDT(data)[, .N, by = .(CreatedMonth = floor_date(dmy(Created), "month"))]
   CreatedMonth  N
1:   2019-01-01 19
2:   2019-02-01  4

Данные

data <- readr::read_table("Created       Ticket
01-Jan-19   a1
02-Jan-19   a2
03-Jan-19   a3
04-Jan-19   a4
05-Jan-19   a5
06-Jan-19   a6
07-Jan-19   a7
08-Jan-19   a8
09-Jan-19   a9
10-Jan-19   a10
11-Jan-19   a11
12-Jan-19   a12
13-Jan-19   a13
14-Jan-19   a14
15-Jan-19   a15
16-Jan-19   a16
17-Jan-19   a17
18-Jan-19   a18
19-Jan-19   a19
01-Feb-19   a20
02-Feb-19   a21
03-Feb-19   a22
04-Feb-19   a23")
0 голосов
/ 20 июня 2019

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

library(dplyr)
df %>%
  mutate(Created = as.Date(Created, "%d-%b-%y")) %>%
  arrange(Created) %>%
  mutate(Yearmon = format(Created, "%B-%Y"), 
         Yearmon = factor(Yearmon, levels = unique(Yearmon))) %>%
  group_by(Yearmon) %>%
  summarise(count = n())


# Yearmon       count
#  <fct>         <int>
#1 January-2019     19
#2 February-2019     4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...