簡體   English   中英

通過數據幀循環功能,區分,然后在原始數據幀中的每列組合

[英]Loop function through dataframe, differentiate, and then combine per column in original dataframe

我正在嘗試使用包 ballr 從籃球參考中收集一些數據。 我正在嘗試使用 NBASeasonTeamByYear 函數來收集多個賽季球隊的賽季結果。 那就是我想要每個團隊的 2017 年到 2020 年的數據,然后再將數據幀組合成由會議分開的 2 個更大的數據幀。

我首先用每個團隊的代碼和會議制作了一個數據框

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)

現在,我在編寫循環時遇到了麻煩,該循環首先使用每個獨特的團隊使用他們的代碼和我想要的年份使用該函數,然后再將它們組合起來,無論年份如何,而是在每次會議中。

我從這個開始

   for (team in league_teams) {

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

}

后面幾行說明我想為各自的年份添加兩列,為各自的團隊代碼添加一列,但不僅是 2017 年,而且一直到 2020 年。雖然我在編寫循環時遇到了麻煩,並認為我使用 rbind稍后將它們組合起來,但我不確定如何這樣做並在我制作的原始數據框中通過會議進行區分。

考慮在用戶定義的方法中概括您的過程,並使用expand.grid (所有組合)和Map (元素循環)傳遞參數:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM