outcome <- read.csv("outcome-of-care-measures.csv", colClasses = "character",header=TRUE)
outcome[, 11] <- as.numeric(outcome[, 11],na.rm=TRUE) # set col Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack to numeric
## Warning: NAs introduced by coercion
hist(outcome[, 11],xlab= "Deaths", main = "Hospital 30-Day Death (Mortality) Rates from Heart Attack")
### 2 Finding the best hospital in a state
#create a function
best<-function(state, outcome){
data <- read.csv("outcome-of-care-measures.csv", colClasses = "character", header=TRUE)
fd <- as.data.frame(cbind(data[, 2], # hospital
data[, 7], # state
data[, 11], # heart attack
data[, 17], # heart failure
data[, 23]), # pneumonia
stringsAsFactors = FALSE)
colnames(fd) <- c("hospital", "state", "heart attack", "heart failure", "pneumonia")
## Check that state and outcome are valid
if(!state %in% fd[, "state"]){
stop('invalid state')
} else if(!outcome %in% c("heart attack", "heart failure", "pneumonia")){
stop('invalid outcome')
} else {
si <- which(fd[, "state"] == state)
ts <- fd[si, ] # extracting data for the called state
oi <- as.numeric(ts[, eval(outcome)])
min_val <- min(oi, na.rm = TRUE)
result <- ts[, "hospital"][which(oi == min_val)]
output <- result[order(result)]
}
return(output)
}
# try out the best function
best("TX", "heart attack")
## Warning in best("TX", "heart attack"): NAs introduced by coercion
## [1] "CYPRESS FAIRBANKS MEDICAL CENTER"
best("TX", "heart failure")
## Warning in best("TX", "heart failure"): NAs introduced by coercion
## [1] "FORT DUNCAN MEDICAL CENTER"
# create a rankhospital function
rankhospital <- function(state, outcome, rank = "best"){
## Read outcome data
data <- read.csv("outcome-of-care-measures.csv", colClasses = "character")
fd <- as.data.frame(cbind(data[, 2], # hospital
data[, 7], # state
data[, 11], # heart attack
data[, 17], # heart failure
data[, 23]), # pneumonia
stringsAsFactors = FALSE)
colnames(fd) <- c("hospital", "state", "heart attack", "heart failure", "pneumonia")
## Check that state and outcome are valid
if (!state %in% fd[, "state"]) {
stop('invalid state')
} else if (!outcome %in% c("heart attack", "heart failure", "pneumonia")){
stop('invalid outcome')
} else if (is.numeric(rank)) {
si <- which(fd[, "state"] == state)
ts <- fd[si, ] # extracting dataframe for the called state
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") {
si <- which(fd[, "state"] == state)
ts <- fd[si, ]
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')
}
}
return(output)
}
# try out
rankhospital("TX", "heart failure", 4)
## Warning in rankhospital("TX", "heart failure", 4): NAs introduced by
## coercion
## [1] "DETAR HOSPITAL NAVARRO"
rankhospital("MD", "heart attack", "worst")
## Warning in rankhospital("MD", "heart attack", "worst"): NAs introduced by
## coercion
## [1] "HARFORD MEMORIAL HOSPITAL"
rankall <- function(outcome, num = "best"){
## Read outcome data
data <- read.csv("outcome-of-care-measures.csv", colClasses = "character")
fd <- as.data.frame(cbind(data[, 2], # hospital
data[, 7], # state
data[, 11], # heart attack
data[, 17], # heart failure
data[, 23]), # pneumonia
stringsAsFactors = FALSE)
colnames(fd) <- c("hospital", "state", "heart attack", "heart failure", "pneumonia")
fd[, eval(outcome)] <- as.numeric(fd[, eval(outcome)])
## Check that state and outcome are valid
if (!outcome %in% c("heart attack", "heart failure", "pneumonia")){
stop('invalid outcome')
} else if (is.numeric(num)) {
by_state <- with(fd, split(fd, 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(fd, split(fd, 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(fd, split(fd, 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')
}
}
return(output)
}
# try out
head(rankall("heart attack", 20), 10)
## Warning in rankall("heart attack", 20): NAs introduced by coercion
## 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