Plot The 30-day Mortality Rates For Heart Attack, Pneumonia And Heart Failure

outcome <- read.csv("F:/Programming Assignment 3/outcome-of-care-measures.csv",colClasses = "character")
outcome[,11] <- as.numeric(outcome[,11]) # Converting Column Class to Numeric for 11th column
## Warning: NAs introduced by coercion
outcome[,17] <- as.numeric(outcome[,17]) # Converting Column Class to Numeric for 17th column
## Warning: NAs introduced by coercion
outcome[,23] <- as.numeric(outcome[,23]) # Converting Column Class to Numeric for 23th column
## Warning: NAs introduced by coercion
par(mfrow=c(3,1))
hist(outcome[,11],main = "Heart Attack")
hist(outcome[,23],main = "Pneumonia")
hist(outcome[,17],main = "Heart Failure")

Finding The Best Hospital In A state

best <- function(state,outcome){
      
      database <- read.csv("F:/Programming Assignment 3/outcome-of-care-measures.csv",colClasses = "character")
      
      ## Creating New Data Frame 'hst' and naming the columns
      hst <- as.data.frame(cbind(database[,2],database[,7],database[,11],database[,17],database[,23]),stringsAsFactors = FALSE) 
      colnames(hst) <- c("hospital","state","heart attack","heart failure","pneumonia")
      
      ## Code for finding the best hospital in the state for the required outcome
      if(!state %in% hst$state){
            stop('invalid state')
      } else if (!outcome %in% c("heart attack","heart failure","pneumonia")){
            stop('invalid outcome')
      } else {
            s <- which(hst[,"state"]==state)
            ts <- hst[s,]     # Data extraction from available states
            o <- as.numeric(ts[,eval(outcome)])
            minimumvalue <- min(o,na.rm = TRUE)
            final <- ts[,"hospital"][which(o==minimumvalue)]
            output <- final[order(final)]
      }
      output
}

Ranking Hospitals By Outcome In A State

rankhospital <- function(state,outcome,rank="best"){
      
      database <- read.csv("F:/Programming Assignment 3/outcome-of-care-measures.csv",colClasses = "character")
      
      ## Creating New Data Frame 'hst' and naming the columns
      hst <- as.data.frame(cbind(database[,2],database[,7],database[,11],database[,17],database[,23])) 
      colnames(hst) <- c("hospital","state","heart attack","heart failure","pneumonia")
      
      ## Code for ranking hospital by outcome in a state
      if(!state %in% hst$state){
            stop('invalid state')
      } else if (!outcome %in% c("heart attack","heart failure","pneumonia")){
            stop('invalid outcome')
      }  else if (is.numeric(rank)){
            s <- which(hst[,"state"]==state)
            ts <- hst[s,]                         # Data extraction from available states
            ts[, eval(outcome)] <- as.numeric(ts[, eval(outcome)])
            ts <- ts[order(ts[, eval(outcome)], ts[, "hospital"]), ]
            output <- ts[, "hospital"][rank]
      } else if (!is.numeric(rank)){
            if (rank=="best"){
            output <- best(state,outcome)
      } else if (rank=="worst") {
            s <- which(hst[,"state"]==state)
            ts <- hst[s,]                         # Data extraction from available states
            ts[, eval(outcome)] <- as.numeric(ts[, eval(outcome)])
            ts <- ts[order(ts[, eval(outcome)], ts[, "hospital"],decreasing=TRUE), ] 
            output <- ts[,"hospital"][1]
      } else{
            stop('invalid rank')
      }
      }
      output
}

Ranking Hospitals In All States

rankall <- function(outcome, num = "best"){
    ## Read outcome data
    database <- read.csv("F:/Programming Assignment 3/outcome-of-care-measures.csv",colClasses = "character")
    
    ## Creating New Data Frame 'hst' and naming the columns
    hst <- as.data.frame(cbind(database[,2],database[,7],database[,11],database[,17],database[,23])                         ,stringsAsFactors = FALSE) 
    colnames(hst) <- c("hospital","state","heart attack","heart failure","pneumonia")
    hst[, eval(outcome)] <- as.numeric(hst[, eval(outcome)])
    
    ## Coding for ranking the hospitals in all the states
    if (!outcome %in% c("heart attack", "heart failure", "pneumonia")){
        stop('invalid outcome')
    } else if (is.numeric(num)) {
        by_state <- with(hst, split(hst, state))
        ordered  <- list()
        for (i in seq_along(by_state)){
            by_state[[i]] <- by_state[[i]][order(by_state[[i]][, eval(outcome)], 
                                                 by_state[[i]][, "hospital"]), ]
            ordered[[i]]  <- c(by_state[[i]][num, "hospital"], by_state[[i]][, "state"][1])
        }
        result <- do.call(rbind, ordered)
        output <- as.data.frame(result, row.names = result[, 2], stringsAsFactors = FALSE)
        names(output) <- c("hospital", "state")
    } else if (!is.numeric(num)) {
        if (num == "best") {
            by_state <- with(hst, split(hst, state))
            ordered  <- list()
            for (i in seq_along(by_state)){
                by_state[[i]] <- by_state[[i]][order(by_state[[i]][, eval(outcome)], 
                                                     by_state[[i]][, "hospital"]), ]
                ordered[[i]]  <- c(by_state[[i]][1, c("hospital", "state")])
            }
            result <- do.call(rbind, ordered)
            output <- as.data.frame(result, stringsAsFactors = FALSE)
            rownames(output) <- output[, 2]
        } else if (num == "worst") {
            by_state <- with(hst, split(hst, state))
            ordered  <- list()
            for (i in seq_along(by_state)){
                by_state[[i]] <- by_state[[i]][order(by_state[[i]][, eval(outcome)], 
                                                     by_state[[i]][, "hospital"], 
                                                     decreasing = TRUE), ]
                ordered[[i]]  <- c(by_state[[i]][1, c("hospital", "state")])
            }
            result <- do.call(rbind, ordered)
            output <- as.data.frame(result, stringsAsFactors = FALSE)
            rownames(output) <- output[, 2]
        } else {
            stop('invalid num')
        }
    }
output
}