Frank B.
Frank B.

Reputation: 1883

R ifelse loop returning unexpected results

I'm trying to interpret + as an All Pro, * as a Pro Bowl, and then the absence of either of those two to default to the name.

My issue seems to be with the "else" portion of my ifelse. Instead of inserting the string it inserts a number.

# libraries 
library(plyr)
library(dplyr)
library(XML)
library(stringr)

# file names 
model_no <- "pfr_003"
model_name <- "fantasy_football_"
image_name <- paste(model_name, model_no, ".RData", sep="")

# parameters
first_season <- 2011
last_season <- 2013

# seasons 
num_seasons <- as.numeric(last_season - first_season + 1)
seasons <- seq(first_season, last_season, by=1)

pfr <- data.frame()
for (i in 1:num_seasons) {
  url <- paste("http://www.pro-football-reference.com/years/", seasons[i],"/fantasy.htm", sep = "") 
  df <- readHTMLTable(url,which=1, header=FALSE)
  df$season = seasons[i]
  df <- df[c(2, 3, 4, 5, 6, 20, 25)]
  pfr <- rbind(pfr, df)
  rm(df)
  print(seasons[i])
}

names(pfr) <- c("NameInfo", "Team", "Age", "G", "GS", "Pos", "Year")

pfr <- pfr[pfr$Team != "Tm", ]

pfr <- pfr[pfr$Name != "Passing", ]


pfr$AllPro <- ifelse(is.na(str_locate(string=pfr$NameInfo, '[+]')[,1]) == TRUE, 0, 1)
pfr$ProBowl <- ifelse(is.na(str_locate(string=pfr$NameInfo, '[*]')[,1]) == TRUE, 0, 1)

# Everything above is cool 

# This ifelse works just fine 
pfr$test1 <- ifelse(pfr$AllPro == 1, "AP", ifelse(pfr$ProBowl == 1, "PB", "None"))

# but when I want to strip the + an * from the NameInfo field I come across an issue
# it works fine for anyone that is AP or PB, but instead of the "else" portion 
# defaulting to the NameInfo field it inserts a (seemingly random) number 

pfr$test2 <- ifelse(pfr$AllPro == 1, str_sub(pfr$Name, end=str_locate(string=pfr$Name, '[+]')[,1]-2),
                    ifelse(pfr$ProBowl == 1, str_sub(pfr$Name, end=str_locate(string=pfr$Name, '[*]')[,1]-1), 
                           pfr$NameInfo))

Any help would be greatly appreciated.

Thanks.

Upvotes: 0

Views: 97

Answers (1)

rmccloskey
rmccloskey

Reputation: 492

Not a random number, but a factor level. Your pfr$NameInfo is a factor. Change the last else to as.character(pfr$NameInfo) if you want a string.

Upvotes: 1

Related Questions