R - суммировать значения строк, вернуть результат в виде строки

У меня есть данные, которые выглядят так:

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   19 obs. of  7 variables:
 $ Week Ending  : chr  "5/1/18" "5/1/18" "5/1/18" "5/1/18" ...
 $ Agent        : chr  "telbenja ." "Tomsaint ." "davidlor ." "moniquec 
." ...
 $ Inbound      : int  25 62 44 36 1 22 144 36 28 51 ...
 $ Manual       : int  0 3 4 22 0 0 13 6 2 1 ...
 $ Avg Talk Time: 'hms' num  00:03:29 00:03:20 00:03:51 00:02:37 ...
  ..- attr(*, "units")= chr "secs"
 $ Avg Wrap Time: 'hms' num  00:01:57 00:01:13 00:01:31 00:01:24 ...
  ..- attr(*, "units")= chr "secs"
 $ Avg Hold Time: 'hms' num  00:00:11 00:00:02 00:00:02 00:00:00

Это всего лишь образец, у меня около 100 000 строк.

В конечном итоге мне нужно иметь «агента» с именем «Среднее», значения которого во всех других столбцах являются просто средними значениями всех других строк в той же «Конец недели» (дата).

Я считаю, что решение этой проблемы - это своего рода group_by и суммировать колдовство dplyr, однако я не могу сделать эту работу для возврата значений строк, группировка и суммирование дадут мне совершенно новый столбец, но это не то, что я хочу, Мне нужна новая запись в строке для каждой даты («Конец недели»), которая содержит среднее значение значений в каждом столбце той же даты.

Любая помощь с этим приветствуется (полностью ожидая шока и ужаса из-за моей формулировки / проблемы, нажмите отрицательный голос, если у вас проблемы со сном).

Результат dput (head (my_data)):

dput(head(response_codes))
structure(list(`Response Code` = structure(c(105L, 72L, 79L, 
159L, 104L, 17L), .Label = c("304001", "312001", "799007", "843001", 
"951001", "1490001", "1490002", "1524002", "1524003", "1620001", 
"1696001", "2297001", "2299001", "2302001", "2305001", "2312001", 
"2314001", "2315001", "2316001", "2317001", "2327001", "2328001", 
"2329001", "2330001", "2333001", "2374001", "2380002", "2415001", 
"2420001", "2428001", "2428004", "2428005", "2428006", "2434001", 
"2435002", "2444002", "2449002", "2457002", "2457003", "2462001", 
"2463001", "2463002", "2478001", "2586010", "2673002", "2677001", 
"2678002", "2682001", "2683002", "2835005", "2938001", "2950001", 
"2974001", "3006001", "3006002", "3007001", "3046001", "3077003", 
"3091001", "3093001", "3093010", "3094003", "3115001", "3115006", 
"3115010", "3116001", "3116003", "3117001", "3117002", "3148001", 
"3214001", "3239001", "3244001", "3245001", "3245002", "3245003", 
"3262001", "3262002", "3273001", "3276001", "3276002", "3276003", 
"3276005", "3276006", "3276012", "3276013", "3276017", "3276019", 
"3276020", "3276021", "3276023", "3276030", "3276036", "3276037", 
"3276038", "3276039", "3276043", "3276044", "3276045", "3276048", 
"3276050", "3289001", "3330001", "3334001", "3334002", "3347001", 
"3348001", "3361001", "3382001", "3383001", "3393001", "3394001", 
"3394002", "3399001", "3403005", "3486003", "3488003", "3491001", 
"3558001", "3584001", "3585002", "3586001", "3588001", "3591001", 
"3677002", "3677003", "3678001", "3678002", "3691003", "3691004", 
"3691005", "3691006", "3691009", "3691010", "3691014", "3692001", 
"3693002", "3694002", "3695002", "3741001", "3743001", "3753001", 
"3753002", "3755001", "3762001", "3765001", "3766001", "3767001", 
"3767002", "3768001", "3769001", "3771001", "3772001", "3792001", 
"3795001", "3797001", "3799001", "3800001", "3810001", "7014001", 
"7371007", "7445001", "9007001", "9009001"), class = "factor"), 
    `Total Recruits` = c(518L, 467L, 345L, 335L, 333L, 224L), 
    `Number of 2nd Purchase (Converts)` = c(217L, 248L, 181L, 
    106L, 218L, 150L), `Total Cms that took a wp on or after their recruitment case` = c(187L, 
    169L, 142L, 104L, 361L, 233L), `Currently Closed Wine Plans` = c(135L, 
    130L, 108L, 79L, 295L, 188L), `Currently Active Wine Plans` = c(52L, 
    39L, 34L, 25L, 66L, 45L), `Upgrade to WP %` = c(36.1, 36.19, 
    41.16, 31.04, 108.41, 104.02), `2nd Purchase Conversion Rate` = c(41.89, 
    53.1, 52.46, 31.64, 65.47, 66.96), `Number of Conti Cases Purchased` = c(232L, 
    208L, 171L, 108L, 449L, 353L), `Number of Distinct WP Customers` = c(94L, 
    101L, 84L, 51L, 193L, 141L)), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

Людям, которые захотят вам помочь, будет проще, если вы сможете поделиться некоторыми фактическими данными примера, а не только его структурой, например включив вывод dput(head(your_table)) в свой вопрос. А еще лучше - пример ожидаемого результата и любой код, который вы пробовали.

Jon Spring 31.10.2018 06:14

Похоже, вы хотите добавить строки со средним недельным значением каждого столбца. Я предполагаю что-то вроде your_data %>% group_by('Week Ending') %>% summarize_if (is.numeric, mean), чтобы получить ваши итоговые строки, а затем что-то вроде bind_rows(your_data, summary_table). Не могу ответить более конкретно без данных примеров.

Jon Spring 31.10.2018 06:19

Спасибо за ваш ответ! Это именно то, что мне нужно, хотя я хотел бы вернуть значение строки в моем исходном фрейме данных для каждой еженедельной сводки - имя агента как «Среднее», а все другие переменные просто суммированы как среднее значение данных за эти недели. Каждую неделю. Еще раз спасибо за вашу помощь!

Davide Lorino 31.10.2018 06:27

Есть ли в этих данных переменная "Окончание недели"? Я не уверен, как вы хотели это сгруппировать.

Jon Spring 31.10.2018 07:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
322
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
library(dplyr)

# 1. Adding fake week and Agent
response_codes <- response_codes %>%
  mutate(fake_week = rep(1:3, each = 2),
         Agent = letters[1:6])

# 2. Make summary by week
summarized <- response_codes %>%
  group_by(fake_week) %>%
  summarise_if (is.numeric, mean) %>%
  mutate(Agent = "Average")

# 3. Combine
combo <- bind_rows(response_codes, summarized)

Выход

# Just showing columns 1-3 and 10-12:
> combo[, c(1:3,10:12)]
# A tibble: 9 x 6
  `Response Code` `Total Recruits` `Number of 2nd Purchase (Converts)` `Number of Distinct WP Customers` fake_week Agent  
  <fct>                      <dbl>                               <dbl>                             <dbl>     <int> <chr>  
1 3334002                     518                                 217                               94           1 a      
2 3239001                     467                                 248                              101           1 b      
3 3273001                     345                                 181                               84           2 c      
4 3810001                     335                                 106                               51           2 d      
5 3334001                     333                                 218                              193           3 e      
6 2314001                     224                                 150                              141           3 f      
7 NA                          492.                                232.                              97.5         1 Average
8 NA                          340                                 144.                              67.5         2 Average
9 NA                          278.                                184                              167           3 Average

Хороший, спасибо! Совершенно не подумал обобщить в виде отдельного фрейма данных, а потом связать их вместе - отличное решение!

Davide Lorino 31.10.2018 07:24

Другие вопросы по теме