R Начинающий: изо всех сил пытается создать сводную таблицу в R - PullRequest
0 голосов
/ 29 ноября 2018

Я очень, очень плохо знаком с любым типом языка программирования.Я привык к сводным таблицам в Excel и пытаюсь скопировать сводку, которую я сделал в Excel в R. Я провел много времени в поисках интернета / YouTube, но просто не могу заставить его работать.

Я собираюсь создать таблицу, в которой в левом столбце показано количество мест, а в верхней части таблицы показаны разные просмотренные страницы.Я хочу показать в таблице количество просмотров по местоположению на каждой из этих страниц.

Во фрейме данных 'specificreports' показаны все просмотры за последний год для разных страниц онлайн-платформы.Я хочу отфильтровать октябрьский месяц, а затем сопоставить различные группы сотрудников с количеством просмотров для разных страниц.

specificreports <- readxl::read_excel("Multi-Tab File - Dashboard 
Usage.xlsx", sheet = "Specific Reports")

specificreportsLocal <- tbl_df(specificreports)
specificreportsLocal %>% filter(Month == "October") %>%
                     group_by("Employee Team") %>%

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

Буду признателен за любую помощь, используя самый простой способ сделать это, так как я новичок!

Заранее спасибо, Холли

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

посмотрим, смогу ли я немного помочь.Трудно понять, как выглядят ваши данные из информации, которую вы нам предоставили.Так что я собираюсь угадать и сделать некоторые фальшивые данные для нас, чтобы поиграть.Стоит отметить, что наличие имен полей с пробелами сделает вашу жизнь по-настоящему сложной.Вы должны начать с переименования ваших полей во что-то более управляемое.Поскольку я просто создаю данные, я буду называть имена моих полей без пробелов:

library(tidyverse)
## this makes some fake data
## a data frame with 3 fields: month, team, value
n <- 100
specificreportsLocal <-
  data.frame(
    month = sample(1:12, size = n, replace = TRUE),
    team = letters[1:5],
    value = sample(1:100, size = n, replace = TRUE)
  )

Это просто фрейм данных с именем specificreportsLocal с тремя полями: month, team, value

Давайте сделаем с этим кое-что:

# This will give us total values by team when month = 10
specificreportsLocal %>% 
  filter(month == 10) %>%
  group_by(team) %>%
  summarize(total_value = sum(value))
#> # A tibble: 4 x 2
#>   team  total_value
#>   <fct>       <int>
#> 1 a             119
#> 2 b             172
#> 3 c              67
#> 4 d             229

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

Теперь давайте используем все месяцы и меняем их с «длинных» на «широкие»

# if I want to see all months I leave out the filter and 
# add a group_by month
specificreportsLocal %>% 
  group_by(team, month) %>%
  summarize(total_value = sum(value)) %>%
  head(5) # this just shows the first 5 values
#> # A tibble: 5 x 3
#> # Groups:   team [1]
#>   team  month total_value
#>   <fct> <int>       <int>
#> 1 a         1          17
#> 2 a         2          46
#> 3 a         3          91
#> 4 a         4          69
#> 5 a         5          83

# to make this 'long' data 'wide', we can use the `spread` function 
specificreportsLocal %>% 
  group_by(team, month) %>%
  summarize(total_value = sum(value)) %>%
  spread(team, total_value)
#> # A tibble: 12 x 6
#>    month     a     b     c     d     e
#>    <int> <int> <int> <int> <int> <int>
#>  1     1    17   122   136    NA   167
#>  2     2    46   104   158    94   197
#>  3     3    91    NA    NA    NA    11
#>  4     4    69   120   159    76    98
#>  5     5    83   186   158    19   208
#>  6     6   103    NA   118   105    84
#>  7     7    NA    NA    73   127   107
#>  8     8    NA   130    NA   166    99
#>  9     9   125    72   118   135    71
#> 10    10   119   172    67   229    NA
#> 11    11   107    81    NA   131    49
#> 12    12   174    87    39    NA    41
Created on 2018-12-01 by the reprex package (v0.2.1)

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

Добро пожаловать в переполнение стека!

0 голосов
/ 29 ноября 2018

Я не уверен, что правильно понял вашу потребность без образца данных, но это может сработать для вас:

library(rpivotTable) specificreportsLocal %>% filter(Month == "October") rpivotTable(specificreportsLocal, rows="Employee Team", cols="page", vals="views", aggregatorName = "Sum")

В противном случае, если вам не нужен интерактивный (как Сводные таблицы в Excel), это может также работать:

specificreportsLocal %>% filter(Month == "October") %>% group_by_at(c("Employee Team", "page")) %>% summarise(nr_views = sum(views, na.rm=TRUE))

...