Plot the 30 day mortality rates for heart attack

outcome <- read.csv("outcome-of-care-measures.csv", colClasses = "character")
# head(outcome)
names(outcome)
##  [1] "Provider.Number"                                                                      
##  [2] "Hospital.Name"                                                                        
##  [3] "Address.1"                                                                            
##  [4] "Address.2"                                                                            
##  [5] "Address.3"                                                                            
##  [6] "City"                                                                                 
##  [7] "State"                                                                                
##  [8] "ZIP.Code"                                                                             
##  [9] "County.Name"                                                                          
## [10] "Phone.Number"                                                                         
## [11] "Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack"                            
## [12] "Comparison.to.U.S..Rate...Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack"  
## [13] "Lower.Mortality.Estimate...Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack" 
## [14] "Upper.Mortality.Estimate...Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack" 
## [15] "Number.of.Patients...Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack"       
## [16] "Footnote...Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack"                 
## [17] "Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure"                           
## [18] "Comparison.to.U.S..Rate...Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure" 
## [19] "Lower.Mortality.Estimate...Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure"
## [20] "Upper.Mortality.Estimate...Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure"
## [21] "Number.of.Patients...Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure"      
## [22] "Footnote...Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure"                
## [23] "Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia"                               
## [24] "Comparison.to.U.S..Rate...Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia"     
## [25] "Lower.Mortality.Estimate...Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia"    
## [26] "Upper.Mortality.Estimate...Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia"    
## [27] "Number.of.Patients...Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia"          
## [28] "Footnote...Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia"                    
## [29] "Hospital.30.Day.Readmission.Rates.from.Heart.Attack"                                  
## [30] "Comparison.to.U.S..Rate...Hospital.30.Day.Readmission.Rates.from.Heart.Attack"        
## [31] "Lower.Readmission.Estimate...Hospital.30.Day.Readmission.Rates.from.Heart.Attack"     
## [32] "Upper.Readmission.Estimate...Hospital.30.Day.Readmission.Rates.from.Heart.Attack"     
## [33] "Number.of.Patients...Hospital.30.Day.Readmission.Rates.from.Heart.Attack"             
## [34] "Footnote...Hospital.30.Day.Readmission.Rates.from.Heart.Attack"                       
## [35] "Hospital.30.Day.Readmission.Rates.from.Heart.Failure"                                 
## [36] "Comparison.to.U.S..Rate...Hospital.30.Day.Readmission.Rates.from.Heart.Failure"       
## [37] "Lower.Readmission.Estimate...Hospital.30.Day.Readmission.Rates.from.Heart.Failure"    
## [38] "Upper.Readmission.Estimate...Hospital.30.Day.Readmission.Rates.from.Heart.Failure"    
## [39] "Number.of.Patients...Hospital.30.Day.Readmission.Rates.from.Heart.Failure"            
## [40] "Footnote...Hospital.30.Day.Readmission.Rates.from.Heart.Failure"                      
## [41] "Hospital.30.Day.Readmission.Rates.from.Pneumonia"                                     
## [42] "Comparison.to.U.S..Rate...Hospital.30.Day.Readmission.Rates.from.Pneumonia"           
## [43] "Lower.Readmission.Estimate...Hospital.30.Day.Readmission.Rates.from.Pneumonia"        
## [44] "Upper.Readmission.Estimate...Hospital.30.Day.Readmission.Rates.from.Pneumonia"        
## [45] "Number.of.Patients...Hospital.30.Day.Readmission.Rates.from.Pneumonia"                
## [46] "Footnote...Hospital.30.Day.Readmission.Rates.from.Pneumonia"
outcome[, 11] <- as.numeric(outcome[, 11])  # Because we originally read data as character
## Warning: 強制變更過程中產生了 NA
hist(outcome[, 11], breaks = 100)

plot of chunk histogram

Finding the best hospital in a state

best <- function(state, outcome) {

    ## Read the outcome data
    dat <- read.csv("outcome-of-care-measures.csv", colClasses = "character")
    ## Check that state and outcome are valid
    if (!state %in% unique(dat[, 7])) {
        stop("invalid state")
    }
    switch(outcome, `heart attack` = {
        col = 11
    }, `heart failure` = {
        col = 17
    }, pneumonia = {
        col = 23
    }, stop("invalid outcome"))
    ## Return hospital name in that state with lowest 30-day death rate
    df = dat[dat$State == state, c(2, col)]
    df[which.min(df[, 2]), 1]
}
best("TX", "heart attack")
## Warning: 強制變更過程中產生了 NA
## [1] "CYPRESS FAIRBANKS MEDICAL CENTER"
# [1] 'CYPRESS FAIRBANKS MEDICAL CENTER'
best("TX", "heart failure")
## Warning: 強制變更過程中產生了 NA
## [1] "FORT DUNCAN MEDICAL CENTER"
# [1] 'FORT DUNCAN MEDICAL CENTER'
best("MD", "heart attack")
## Warning: 強制變更過程中產生了 NA
## [1] "JOHNS HOPKINS HOSPITAL, THE"
# [1] 'JOHNS HOPKINS HOSPITAL, THE'
best("MD", "pneumonia")
## [1] "GREATER BALTIMORE MEDICAL CENTER"
# [1] 'GREATER BALTIMORE MEDICAL CENTER'
best("BB", "heart attack")
## Error: invalid state
# 錯誤在best('BB', 'heart attack') : invalid state
best("NY", "hert attack")
## Error: invalid outcome
# 錯誤在best('NY', 'hert attack') : invalid outcome

Ranking hospitals by outcome in a state

rankhospital <- function(state, outcome, num = "best") {

    ## Read the outcome data
    dat <- read.csv("outcome-of-care-measures.csv", colClasses = "character")
    ## Check that state and outcome are valid
    if (!state %in% unique(dat[, 7])) {
        stop("invalid state")
    }
    switch(outcome, `heart attack` = {
        col = 11
    }, `heart failure` = {
        col = 17
    }, pneumonia = {
        col = 23
    }, stop("invalid outcome"))
    dat[, col] = as.numeric(dat[, col])
    df = dat[dat[, 7] == state, c(2, col)]
    df = na.omit(df)
    nhospital = nrow(df)
    switch(num, best = {
        num = 1
    }, worst = {
        num = nhospital
    })
    if (num > nhospital) {
        return(NA)
    }
    ## Return hospital name in that state with the given rank 30-day death rate

    o = order(df[, 2], df[, 1])
    df[o, ][num, 1]
}
rankhospital("TX", "heart failure", 4)
## Warning: 強制變更過程中產生了 NA
## [1] "DETAR HOSPITAL NAVARRO"
# [1] 'DETAR HOSPITAL NAVARRO'

rankhospital("MD", "heart attack", "worst")
## Warning: 強制變更過程中產生了 NA
## [1] "HARFORD MEMORIAL HOSPITAL"
# [1] 'HARFORD MEMORIAL HOSPITAL'

rankhospital("MN", "heart attack", 5000)
## Warning: 強制變更過程中產生了 NA
## [1] NA
# [1] NA

Ranking hospitals in all states

rankall <- function(outcome, num = "best") {
    ## Read the outcome data
    dat <- read.csv("outcome-of-care-measures.csv", colClasses = "character")
    ## Check that state and outcome are valid
    states = unique(dat[, 7])
    switch(outcome, `heart attack` = {
        col = 11
    }, `heart failure` = {
        col = 17
    }, pneumonia = {
        col = 23
    }, stop("invalid outcome"))

    ## Return hospital name in that state with the given rank 30-day death rate
    dat[, col] = as.numeric(dat[, col])
    dat = dat[, c(2, 7, col)]  # leave only name, state, and death rate
    dat = na.omit(dat)
    # head(dat) Hospital.Name State 1 SOUTHEAST ALABAMA MEDICAL CENTER AL 2
    # MARSHALL MEDICAL CENTER SOUTH AL 3 ELIZA COFFEE MEMORIAL HOSPITAL AL 7 ST
    # VINCENT'S EAST AL 8 DEKALB REGIONAL MEDICAL CENTER AL 9 SHELBY BAPTIST
    # MEDICAL CENTER AL
    # Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack 1 14.3 2 18.5 3
    # 18.1 7 17.7 8 18.0 9 15.9
    rank_in_state <- function(state) {
        df = dat[dat[, 2] == state, ]
        nhospital = nrow(df)
        switch(num, best = {
            num = 1
        }, worst = {
            num = nhospital
        })
        if (num > nhospital) {
            result = NA
        }
        o = order(df[, 3], df[, 1])
        result = df[o, ][num, 1]
        c(result, state)
    }
    output = do.call(rbind, lapply(states, rank_in_state))
    output = output[order(output[, 2]), ]
    rownames(output) = output[, 2]
    colnames(output) = c("hospital", "state")
    data.frame(output)
}
head(rankall("heart attack", 20), 10)
## Warning: 強制變更過程中產生了 NA
##                               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)
## Warning: 強制變更過程中產生了 NA
##                                      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)
## Warning: 強制變更過程中產生了 NA
##                                                             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