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