L oop работает через фрейм данных, дифференцирует, а затем объединяет по столбцам в оригинальном фрейме данных - PullRequest
1 голос
/ 18 февраля 2020

Я пытаюсь использовать пакетный баллер для сбора данных из баскетбольной ссылки. Я пытаюсь использовать функцию NBASeasonTeamByYear, чтобы собрать результаты сезона команд за несколько сезонов. То есть я хочу получить данные каждой команды за 2017–2020 годы, прежде чем объединить кадры данных в два больших, разделенных по конференциям.

Сначала я создал кадр данных с кодом каждой команды и конференцией

league_teams <- data.frame("team" = c("ATL", "BOS", "NJN", "CHA", "CHI", "CLE", "DAL", "DEN", 
                                  "DET", "GSW", "HOU", "IND", "LAC", "LAL", "MEM", "MIA",
                                  "MIL", "MIN", "NOH", "NYK", "OKC", "ORL", "PHI", "PHO",
                                  "POR", "SAC", "SAS", "TOR", "UTA", "WAS"), 
                       "conference" = c("East", "East", "East", "East", "East", "East", "West",
                                        "West", "East", "West", "West", "East", "West", "West",
                                        "West", "East", "East", "West", "West", "East", "West",
                                        "East", "East", "West", "West", "West", "West", "East",
                                        "West", "East"))
league_teams$team <- as.character(league_teams$team)
league_teams$conference <- as.factor(league_teams$conference)

Теперь у меня проблемы с написанием l oop, который сначала использует функцию для каждой уникальной команды, используя их код и годы, которые я хочу, прежде чем объединять их, независимо от года, но внутри каждой конференции.

Я начал с этим

   for (team in league_teams) {

  team_2017 <- NBASeasonTeamByYear(team = team, 2017)
  team_2017$season <- as.factor(2017)
  team_2017$team <- as.factor(team)

}

Последние строки, иллюстрирующие, что я хочу добавить 2 столбца, один для соответствующего года и один для соответствующего кода команды, но не только для 2017 года, но и до 2020 года. Хотя я ' У меня проблемы с написанием l oop, и я думаю, что позже я использую rbind для их объединения, но я не уверен, как это сделать, и различу по конференции в исходном кадре данных, который я сделал.

1 Ответ

1 голос
/ 18 февраля 2020

Рассмотрите возможность обобщения вашего процесса в пользовательском методе и передайте параметры с expand.grid (все комбинации) и Map (поэлементно l oop):

nba_df_build <- function(yr, team, conf) {    
  # base::TRANSFORM OR dplyr::MUTATE
  transform(NBASeasonTeamByYear(team = team, season = yr),         
            season = as.factor(yr),
            team = as.factor(team),
            conference = as.factor(conf))  
}

params_df <- expand.grid(year = 2017:2020,
                         team = league_teams$team,
                         conference = league_teams$conference)

df_list <- Map(nba_df_build, params_df$year, params_df$team, params_df$conference)

final_df <- do.call(rbind, df_list)
#final_df <- dplyr::bind_rows(df_list)

И для любого разбиения фреймы данных:

# LIST OF TWO CONFERENCE DATA FRAMES
conference_dfs <- split(final_df, final_df$conference)

# LIST OF FOUR SEASON DATA FRAMES
season_dfs <- split(final_df, final_df$season)

# LIST OF THIRTY TEAM DATA FRAMES
team_dfs <- split(final_df, final_df$team)
...