Сопоставьте два кадра данных с разными именами столбцов и создайте новый столбец со средним от другого - PullRequest
0 голосов
/ 31 января 2020

У меня есть два кадра данных. Первый перечисляет каждую Школу / Команду только один раз, что-то вроде этого:

classA <- data.frame(School=c("Omaha South", "Millard North", "Elkhorn"))

Другой фрейм данных - это таблица результатов баскетбола за сезон, и вы можете указать, что Школу / Команду можно перечислить более одного раза в тот же столбец:

scores <- data.frame('Away Score'=c(60,84,48,72),
                     'Away Team'=c("Omaha South", "Millard North", "Elkhorn","Elkhorn"),
                     'Home Score'=c(88,40,38,62),
                     'Home Team'=c("Elkhorn", "Omaha South", "Millard North","Omaha South"))

Моя цель - создать новый столбец с именем classA $ 'Away PPG', который усредняет все «показатели отсутствия» для каждой школы в первом фрейме данных. Таким образом, в результате для Элкхорна новый столбец classA будет иметь значение 60 (48 + 72) /2.

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

Ранее я получил помощь по несколько связанной проблеме, где я искал подсчет вместо среднего, но не мог понять, как его изменить работать для этого. решение для проблемы подсчета выглядело так:

df2 %>% 
right_join(df1, by = c('Winner' = 'School')) %>% 
na.omit() %>% 
count(Winner, name = "wins") %>% 
right_join(df1, c('Winner' = 'School')) %>% 
mutate(wins = replace(wins, is.na(wins), 0))

1 Ответ

1 голос
/ 31 января 2020

Мы можем присоединиться к classA с scores и затем взять mean из Away.Score для каждого School.

library(dplyr)

classA %>% 
  left_join(scores, by = c('School' = 'Away.Team')) %>%
  group_by(School) %>%
  summarise(AwayScore = mean(Away.Score, na.rm = TRUE))

# A tibble: 3 x 2
#  School        AwayScore
#  <fct>             <dbl>
#1 Elkhorn              60
#2 Millard North        84
#3 Omaha South          60

Аналогично в базе R

aggregate(Away.Score~School, 
      merge(classA, scores, by.x = 'School', by.y = 'Away.Team'),
      mean, na.rm = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...