Finding the best hospital in a state

best <- function(state, outcome) {
  ## Read outcome data
  Outcome <-  read.csv("C:/Users/kwak/Desktop/outcome-of-care-measures.csv", header=TRUE)
  ## Check that state and outcome are valid
  if(state%in%unique(Outcome$State)==FALSE){stop("invalid state")}
  if(outcome%in%c("heart attack", "heart failure", "pneumonia")==FALSE){stop("invalid outcome")}
  ## Return hospital name in that state with lowest 30-day death   
  if(outcome=="heart attack"){result <- Outcome[,c(2,7,11)]}
  if(outcome=="heart failure"){result <- Outcome[,c(2,7,17)]}
  if(outcome=="pneumonia"){result <- Outcome[,c(2,7,23)]}
  try(f(), silent = TRUE)
  result <- subset(result,State==state)
  result[,3] <- as.character(result[,3])
  suppressWarnings(result[,3] <- as.numeric(result[,3]))
  result <- na.omit(result)
  result <- result[c(order(result[,3],result$Hospital.Name)),]
  result <- result[1,1]
  result <- as.character(result)
  return(result)
}

Best funtion Test

best("TX", "heart attack")
[1] "CYPRESS FAIRBANKS MEDICAL CENTER"
best("TX", "heart failure")
[1] "FORT DUNCAN MEDICAL CENTER"
best("MD", "heart attack")
[1] "JOHNS HOPKINS HOSPITAL, THE"
best("MD", "pneumonia")
[1] "GREATER BALTIMORE MEDICAL CENTER"
best("BB", "heart attack")
Error in best("BB", "heart attack"): invalid state
best("NY", "hert attack")
Error in best("NY", "hert attack"): invalid outcome

Ranking hospitals by outcome in a state

rankhospital <- function(state, outcome, num = "best") {
  ## Read outcome data
  Outcome <-  read.csv("C:/Users/kwak/Desktop/outcome-of-care-measures.csv", header=TRUE)
  ## Check that state and outcome are valid
  if(state%in%unique(Outcome$State)==FALSE){stop("invalid state")}
  if(outcome%in%c("heart attack", "heart failure", "pneumonia")==FALSE){stop("invalid outcome")}
  ## Return hospital name in that state with the given rank
  if(outcome=="heart attack"){result <- Outcome[,c(2,7,11)]}
  if(outcome=="heart failure"){result <- Outcome[,c(2,7,17)]}
  if(outcome=="pneumonia"){result <- Outcome[,c(2,7,23)]}
  try(f(), silent = TRUE)
  result <- subset(result,State==state)
  result[,3] <- as.character(result[,3])
  suppressWarnings(result[,3] <- as.numeric(result[,3]))
  result <- na.omit(result)
  result <- result[c(order(result[,3],result$Hospital.Name)),]
  result$rank <- 1:nrow(result)
  ## 30-day death rate
  if(num == "best"){rank <- result[1,1]}
    else if(num == "worst"){rank <- result[nrow(result),1]}
    else if(num<=nrow(result)){rank <- result[num,1]}
    else{rank <- NA}
  rank <- as.vector(rank)
  return(rank)
}

rankhospital function test

rankhospital("TX", "heart failure", 4)
[1] "DETAR HOSPITAL NAVARRO"
rankhospital("MD", "heart attack", "worst")
[1] "HARFORD MEMORIAL HOSPITAL"
rankhospital("MN", "heart attack", 5000)
[1] NA

Ranking hospitals in all states

rankall <- function(outcome, num = "best") {
  ## Read outcome data
  Outcome <-  read.csv("C:/Users/kwak/Desktop/outcome-of-care-measures.csv", header=TRUE)
  ## Check that state and outcome are valid
  if(outcome%in%c("heart attack", "heart failure", "pneumonia")==FALSE){stop("invalid outcome")}
  ## For each state, find the hospital of the given rank
  if(outcome=="heart attack"){result <- Outcome[,c(2,7,11)]}
  else if(outcome=="heart failure"){result <- Outcome[,c(2,7,17)]}
  else{result <- Outcome[,c(2,7,23)]}
  try(f(), silent = TRUE)
  result[,3] <- as.character(result[,3])
  suppressWarnings(result[,3] <- as.numeric(result[,3]))
  result <- result[c(order(result$State,result[,3],result$Hospital.Name)),]
  result$Hospital.Name <- as.character(result$Hospital.Name)
  result$State <- as.character(result$State)
  rank <- result[-c(1:nrow(result)),]
  
  for (i in 1:length(unique(result$State)))
  {
    if(num=="best"){
      data <- subset(result, State == unique(result$State)[i])
      rank <- rbind(rank,data[1,])
    }
    else if(num=="worst"){
      data <- subset(result, State == unique(result$State)[i])
      if(sum(is.na(data))==nrow(data))
      {rank <- rbind(rank,data[1.])}
      else {
        data <- na.omit(data)
        rank <- rbind(rank,data[nrow(data),])
      }
    }
    else if(nrow(subset(result, State == unique(result$State)[i]))<num)
    {
      data <- subset(result, State == unique(result$State)[i])
      data[nrow(data),3] <- NA
      rank <- rbind(rank,data[nrow(data),])
    }
    else
    {
      data <- subset(result, State == unique(result$State)[i])
      rank <- rbind(rank,data[num,])
    }
  }
  
  for (i in 1:nrow(rank)){
    if(is.na(rank[i,3])==TRUE){
      rank[i,1] <- NA
    }
    else{
      next}
  }
  
  ## Return a data frame with the hospital names and the (abbreviated) state name
  colnames(rank) <- c("hospital","state","rate")
  rownames(rank) <- unique(result$State)
  return(rank[,c(1,2)])  
}

rankall function test

head(rankall("heart attack", 20),10)
                              hospital state
AK                                <NA>    AK
AL      D W MCMILLAN MEMORIAL HOSPITAL    AL
AR   ARKANSAS METHODIST MEDICAL CENTER    AR
AZ JOHN C LINCOLN DEER VALLEY HOSPITAL    AZ
CA               SHERMAN OAKS HOSPITAL    CA
CO            SKY RIDGE MEDICAL CENTER    CO
CT             MIDSTATE MEDICAL CENTER    CT
DC                                <NA>    DC
DE                                <NA>    DE
FL      SOUTH FLORIDA BAPTIST HOSPITAL    FL
tail(rankall("pneumonia", "worst"),3)
                                     hospital state
WI MAYO CLINIC HEALTH SYSTEM - NORTHLAND, INC    WI
WV                     PLATEAU MEDICAL CENTER    WV
WY           NORTH BIG HORN HOSPITAL DISTRICT    WY
tail(rankall("heart failure"), 10)
                                                            hospital state
TN                         WELLMONT HAWKINS COUNTY MEMORIAL HOSPITAL    TN
TX                                        FORT DUNCAN MEDICAL CENTER    TX
UT VA SALT LAKE CITY HEALTHCARE - GEORGE E. WAHLEN VA MEDICAL CENTER    UT
VA                                          SENTARA POTOMAC HOSPITAL    VA
VI                            GOV JUAN F LUIS HOSPITAL & MEDICAL CTR    VI
VT                                              SPRINGFIELD HOSPITAL    VT
WA                                         HARBORVIEW MEDICAL CENTER    WA
WI                                    AURORA ST LUKES MEDICAL CENTER    WI
WV                                         FAIRMONT GENERAL HOSPITAL    WV
WY                                        CHEYENNE VA MEDICAL CENTER    WY