Агрегатная функция в R с использованием нескольких критериев - PullRequest
0 голосов
/ 14 декабря 2018

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

Вот пример кода, который я сделал.Я могу суммировать голы, забитые в колонке FTHG (очные домашние голы), но на данный момент они основаны только на голах домашней команды.

goalsScored <- aggregate(FTHG ~ HomeTeam, matchData, sum)

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

goalsScored <- aggregate(FTHG + FTAG ~ HomeTeam, matchData, sum)

Вот пример таблицы (matchData):

---------------------------------
HomeTeam | AwayTeam | FTHG | FTAG
TeamA    |  TeamB   |   3  |  1
TeamC    |  TeamD   |   1  |  0
TeamB    |  TeamA   |   2  |  2
TeamD    |  TeamC   |   0  |  3

Результат должен быть таким (goalScored):

---------------------------------
Team  | GoalsScored
TeamA |      5
TeamB |      3
TeamC |      4
TeamD |      0

1 Ответ

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

Используя ваш пример:

df<-data.frame(HomeTeam = c("TeamA","TeamC","TeamB","TeamD"),
               AwayTeam = c("TeamB","TeamD","TeamA","TeamC"),
               FTHG = c(3,1,2,0),
               FTAG = c(1,0,2,3))

Вы можете сделать это с помощью Base R, но dplyr упрощает пошаговое выполнение.Индексирование каждого столбца team и затем связывание их по строкам с использованием rbind позволит вам суммировать их.При необходимости вы можете сохранить его как отдельный фрейм данных.

Вот ваш вывод:

library(dplyr)

rbind(data.frame(Team = df[,1], Goals_Scored = df[,3]),
      data.frame(Team = df[,2], Goals_Scored = df[,4])) %>%
  group_by(Team) %>% 
  summarize(Goals_Scored = sum(Goals_Scored))

Team  | Goals Scored
TeamA |      5
TeamB |      3
TeamC |      4
TeamD |      0
...