Есть ли способ на R объединить строки, чтобы получить общее / среднее значение? - PullRequest
2 голосов
/ 27 мая 2020

У меня есть большой df, который выглядит следующим образом:

Name      Year    Runs   Average
J. Doe    2016    432    44.5
J. Doe    2017    325    37.4
J. Bloggs 2016    289    54.3

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

Ответы [ 2 ]

4 голосов
/ 27 мая 2020

Вы можете использовать dplyr:

library(dplyr)
df %>% 
  group_by(Name) %>% 
  summarise(sum_of_runs = sum(Runs),
            average_of_column_x = mean(column_x, na.rm = TRUE))
0 голосов
/ 27 мая 2020

Если вы хотите sum Runs столбец и взять mean из Average столбца для каждого уникального значения в Name, используя data.table, вы можете сделать:

library(data.table)
setDT(df)[, .(Runs = sum(Runs), Avg = mean(Average)), Name]

#       Name Runs  Avg
#1:    J.Doe  757 41.0
#2: J.Bloggs  289 54.3

Добавьте na.rm = TRUE в функции sum и mean, если у вас есть значения NA.

данные

df <- structure(list(Name = c("J.Doe", "J.Doe", "J.Bloggs"), Year = c(2016L, 
2017L, 2016L), Runs = c(432L, 325L, 289L), Average = c(44.5, 
37.4, 54.3)), class = "data.frame", row.names = c(NA, -3L))
...