Case_when: имя столбца объекта не найдено - PullRequest
0 голосов
/ 16 января 2020

Сценарий, приведенный ниже, go выведет и проанализирует json и вернет кадр данных с именем столбца игрока. Там есть имена, которые я хотел бы изменить, поскольку они не соответствуют другому моему набору данных. Я не уверен, в чем проблема с аргументом case_when ниже. Я прогуглил это, просмотрел множество других попыток и, похоже, не смог получить его до go.

library(jsonlite)
library(tidyverse)
library(dplyr)

# GET Todays date
today <- Sys.Date()-1
#Json return from URL
getlabteamsRaw <- paste0('https://www.fantasylabs.com/api/lines/4/', today, '/startinggoalies')
# Turn Value into List
getlabteams <- fromJSON(getlabteamsRaw)
teams <- c(getlabteams$GoalieMatchups$Properties$HomeTeam, getlabteams$GoalieMatchups$Properties$VisitorTeam)
myfun <- function(x) {
  getlabskatersRaw <- paste0('https://www.fantasylabs.com/api/lines/4/', x,'/', today)
  getlabskaters <- fromJSON(getlabskatersRaw)
  select(getlabskaters$PlayerLines$Properties, FullName, Position, Line, Team, OppTeam, Salary_DK, Salary_FD, ActualPoints_DK, ActualPoints_FD, ImpPts_DK, ImpPts_FD)
}
full_labs_skater_df <- teams %>% 
  set_names() %>% 
  map_df(myfun, .id = "team")
# Seperate F and D from Line (1F,1D)
full_labs_skater_df$Line <- gsub('F', '', full_labs_skater_df$Line)
full_labs_skater_df$Line <- gsub('D', '', full_labs_skater_df$Line)
# Create seperate columns from non powerplay, powerplay 1, powerplay 2
full_labs_skater_df$ppline3 <- ifelse(full_labs_skater_df$Line %in% c("1","2","3","4"), 0, '')
full_labs_skater_df$ppline1 <- ifelse(full_labs_skater_df$Line == "PP1", 1, '')
full_labs_skater_df$ppline2 <- ifelse(full_labs_skater_df$Line == "PP2", 2, '')
# Combine all powerplay lines into 1
full_labs_skater_df$PPLine <- paste(full_labs_skater_df$ppline1,full_labs_skater_df$ppline2,full_labs_skater_df$ppline3)
# Drop extra columns
keep_lab_features <- c("FullName","Position","Line","PPLine","Team","OppTeam","Salary_DK","Salary_FD",
                       "ActualPoints_DK","ActualPoints_FD","ImpPts_DK","ImpPts_FD")
full_labs_skater_df <- full_labs_skater_df[keep_lab_features]
# Create 3 dataframes to filtering by non powerplay players, powerplay players and goalies.
lab_skater_df <- full_labs_skater_df[full_labs_skater_df$Line %in% c("1","2","3","4"),]
powerplay_lab_skater_df <- full_labs_skater_df[full_labs_skater_df$Line %in% c("PP1","PP2"),]
goalie_lab_skater_df <- full_labs_skater_df[full_labs_skater_df$Line %in% c("1G","2G"),]
# Full join the skaters back together by Fullname to get powerplay lines 
skater_lab <- full_join(lab_skater_df, powerplay_lab_skater_df, 
                                by = c("FullName"))
keep_lab_skater <- c("FullName","Position.x","Line.x","PPLine.y","Team.x","OppTeam.x","Salary_DK.x","Salary_FD.x",
                       "ActualPoints_DK.x","ActualPoints_FD.x","ImpPts_DK.x","ImpPts_FD.x")
skater_lab <- skater_lab[keep_lab_skater]
skater_lab[is.na(skater_lab)] <- 0
colnames(skater_lab)[colnames(skater_lab)=="FullName"] <- "player"
colnames(skater_lab)[colnames(skater_lab)=="Position.x"] <- "Position"
colnames(skater_lab)[colnames(skater_lab)=="Line.x"] <- "Line"
colnames(skater_lab)[colnames(skater_lab)=="PPLine.y"] <- "PPLine"
colnames(skater_lab)[colnames(skater_lab)=="Team.x"] <- "Team"
colnames(skater_lab)[colnames(skater_lab)=="OppTeam.x"] <- "OppTeam"
colnames(skater_lab)[colnames(skater_lab)=="Salary_DK.x"] <- "Salary_DK"
colnames(skater_lab)[colnames(skater_lab)=="Salary_FD.x"] <- "Salary_FD"
colnames(skater_lab)[colnames(skater_lab)=="ActualPoints_DK.x"] <- "ActualPoints_DK"
colnames(skater_lab)[colnames(skater_lab)=="ActualPoints_FD.x"] <- "ActualPoints_FD"
colnames(skater_lab)[colnames(skater_lab)=="ImpPts_DK.x"] <- "ImpPts_DK"
colnames(skater_lab)[colnames(skater_lab)=="ImpPts_FD.x"] <- "ImpPts_FD"
skater_lab$player <- gsub(' ', '.', skater_lab$player)
skater_lab$player <- toupper(skater_lab$player)


skater_lab$player <- mutate(
  player = 
    ## Specific name changes
    case_when(
      player == "ANDREI.KASTSITSYN" ~ "ANDREI.KOSTITSYN",
      player == "AJ.GREER" ~ "A.J..GREER",
      player == "ANDREW.GREENE" ~ "ANDY.GREENE",
      player == "ANDREW.WOZNIEWSKI" ~ "ANDY.WOZNIEWSKI", 
      player == "ANTHONY.DEANGELO" ~ "TONY.DEANGELO",
      player == "BATES (JON).BATTAGLIA" ~ "BATES.BATTAGLIA",
      player %in% c("BJ.CROMBEEN", "B.J.CROMBEEN", "BRANDON.CROMBEEN") ~ "B.J..CROMBEEN", 
      player == "BRADLEY.MILLS" ~ "BRAD.MILLS",
      player == "CAMERON.BARKER" ~ "CAM.BARKER", 
      player == "COLIN (JOHN).WHITE" ~ "COLIN.WHITE",
      player == "CRISTOVAL.NIEVES" ~ "BOO.NIEVES",
      player == "CHRIS.VANDE VELDE" ~ "CHRIS.VANDEVELDE", 
      player == "DANNY.BRIERE" ~ "DANIEL.BRIERE",
      player %in% c("DAN.CLEARY", "DANNY.CLEARY") ~ "DANIEL.CLEARY",
      player == "DANIEL.GIRARDI" ~ "DAN.GIRARDI", 
      player == "DANNY.O'REGAN" ~ "DANIEL.O'REGAN",

      TRUE ~ player
    )
)
skater_lab$player[[col_name]] <- skater_lab$player

Ответы [ 2 ]

2 голосов
/ 16 января 2020

Вы забыли передать фрейм данных в функцию mutate и сохраняете результирующий фрейм данных в столбце player. Вы можете сделать это так:

skater_lab <- mutate(skater_lab, player=case_when(...))

Или вот так:

skater_lab <- skater_lab %>% mutate(player=case_when(...))

Или вот так:

skater_lab$player <- with(skater_lab, case_when(...))
1 голос
/ 16 января 2020

Да, проблема около case_when(), но не точно

Если вы используете dplyr формат mutate(), он работает

skater_lab <- skater_lab %>% 
  mutate(  player = 
    ## Specific name changes
    case_when(
      player == "ANDREI.KASTSITSYN" ~ "ANDREI.KOSTITSYN",
      player == "AJ.GREER" ~ "A.J..GREER",
      player == "ANDREW.GREENE" ~ "ANDY.GREENE",
      player == "ANDREW.WOZNIEWSKI" ~ "ANDY.WOZNIEWSKI", 
      player == "ANTHONY.DEANGELO" ~ "TONY.DEANGELO",
      player == "BATES (JON).BATTAGLIA" ~ "BATES.BATTAGLIA",
      player %in% c("BJ.CROMBEEN", "B.J.CROMBEEN", "BRANDON.CROMBEEN") ~ "B.J..CROMBEEN", 
      player == "BRADLEY.MILLS" ~ "BRAD.MILLS",
      player == "CAMERON.BARKER" ~ "CAM.BARKER", 
      player == "COLIN (JOHN).WHITE" ~ "COLIN.WHITE",
      player == "CRISTOVAL.NIEVES" ~ "BOO.NIEVES",
      player == "CHRIS.VANDE VELDE" ~ "CHRIS.VANDEVELDE", 
      player == "DANNY.BRIERE" ~ "DANIEL.BRIERE",
      player %in% c("DAN.CLEARY", "DANNY.CLEARY") ~ "DANIEL.CLEARY",
      player == "DANIEL.GIRARDI" ~ "DAN.GIRARDI", 
      player == "DANNY.O'REGAN" ~ "DANIEL.O'REGAN",

      TRUE ~ player
    )
)
...