r - case_when:找不到对象列名
问题描述
下面的脚本将解析一些 json 并返回一个包含 player 列名的数据框。那里有我想更改的名称,因为它们与我的另一个数据集不匹配。我不确定下面的 case_when 参数有什么问题。我已经用谷歌搜索了它并查看了很多其他尝试,但似乎无法让它去。
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
解决方案
您忘记将数据框传递给 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(...))
推荐阅读
- php - 如何在 wordpress 中添加可编辑的超链接?
- android - 未找到 ID 为“kotlin-android”的插件。尝试运行我的代码时给我这个错误
- ajax - 使用 Ajax 应用编辑/删除数据表时的问题
- mysql - 如何构建具有多种类型项目(服务、零件和保险等)的模式
- docker - docker如何清理deployment生成的过期镜像和容器
- python - 切片熊猫数据框列表
- python - 使用 YOLOv3 进行目标检测
- reactjs - 错误:拒绝在“tus-js-client”npm 包中获取不安全的标头“Location”
- tiff - 如何确定 tiff 是否以 bigtiff 格式编写
- gatsby - 在没有 GraphQL 的情况下使用 gatsby-image?