Как я могу сгруппировать одно и то же значение по нескольким столбцам и суммировать последующие значения? - PullRequest
0 голосов
/ 22 февраля 2020

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

  rusher_full_name  receiver_full_name rushing_fpts receiving_fpts
  <chr>             <chr>                     <dbl>          <dbl>
1 Aaron Jones       NA                          5              0  
2 NA                Aaron Jones                 0              5
3 Mike Davis        NA                          0.5            0
4 NA                Allen Robinson              0              3  
5 Mike Davis        NA                          0.7            0

То, что я пытаюсь сделать, это получить все значения из rushing_fpts и receive_fpts для суммирования в зависимости от rusher_full_name и значение имя_приемника Например, для каждого экземпляра «Аарона Джонса» (будь то имя rusher_full_name или receive_full_name) суммируйте значения rushing_fpts и receive_fpts

В конце концов, это то, что я хотел бы, чтобы это выглядело:

  player_full_name    total_fpts
  <chr>                    <dbl>
1 Aaron Jones                 10  
2 Mike Davis                 1.2
3 Allen Robinson               3  

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

1 Ответ

1 голос
/ 22 февраля 2020
library(tidyverse)

df %>%
  mutate(player_full_name = coalesce(rusher_full_name, receiver_full_name)) %>%
  group_by(player_full_name) %>%
  summarise(total_fpts = sum(rushing_fpts+receiving_fpts))

Выход

# A tibble: 3 x 2
  player_full_name total_fpts
  <chr>                 <dbl>
1 Aaron Jones            10  
2 Allen Robinson          3  
3 Mike Davis              1.2

Данные

df <- data.frame(
  rusher_full_name = c("Aaron Jones", NA, "Mike Davis", NA, "Mike Davis"),
  receiver_full_name = c(NA, "Aaron Jones", NA, "Allen Robinson", NA),
  rushing_fpts = c(5,0,0.5,0,.7),
  receiving_fpts = c(0,5,0,3,0),
  stringsAsFactors = FALSE
)
...