這是Coursera提供的R編程課程的一部分任務。我們正在編寫一個函數,使得某一特定狀態下的醫院返回給定結果(心臟病發作,心臟衰竭和肺炎)的30天死亡率最低。這些信息以csv文件形式給出,其中包括link,由另一名學生提供,此作業存在問題。輸入:國家名稱(例如「TX」,「LA」)和結果(「心臟病發作」,「心力衰竭」和「肺炎」)。 輸出:給定狀態下給定結果的最低30天死亡率醫院的名稱。使用R中的order()函數輸出的不一致性(3.2.1)
此外,如果狀態或結果無效,我已成功完成該計劃,並且必須按字母順序排列等價醫院來打破關係。
這是我的代碼。
best<-function(state,outcome){
data<-read.csv("outcome-of-care-measures.csv",colClasses="character")
outcomes_valid<-c("heart attack","heart failure","pneumonia")
if(!outcome %in% outcomes_valid){stop("invalid outcome")}
else if(!state %in% data$State){stop("invalid state")}
else{
if(outcome == "heart attack"){
ha<-data[data$State==state,c(2,11)]
ha<-ha[order(ha[,2],ha[,1]),]
return(as.character(ha[1,1]))
}
else if(outcome=="heart failure"){
hf<-data[data$State==state,c(2,17)]
hf<-hf[order(hf[,2],hf[,1]),]
return(as.character(hf[1,1]))
}
else if(outcome=="pneumonia"){
pn<-data[data$State==state,c(2,23)]
pn<-pn[order(pn[,2],pn[,1]),]
return(as.character(pn[1,1]))
}
}
}
所以,這是發生了什麼事。我的一些代碼似乎工作正常,因爲當我使用最好的(「TX」,「心臟病發作」)時,我得到了正確的醫院(賽普拉斯費爾班克斯...)。然而,最好的(「TX」,「心力衰竭」)並沒有歸還正確的醫院,而是(哈里斯郡醫院區而不是鄧肯堡)。最好的(「MD」,「心臟病發作」)似乎也起作用,但我的代碼除了列號之外,對於心力衰竭和心臟病發作(以及肺炎)是一樣的。
我嘗試過的不同的事情:改變第二數據集爲ha2,hf2等,將「return(as.character ...)」改爲「head(hf)」以試圖查看正在發生的事情,只是似乎沒有按照字母順序或死亡率順序排列。更改字符名稱(hf $ Hospital.Name)而不是列。
讓我知道是否有任何信息未提供。任何幫助深表感謝!
你的數據被讀取爲因素而不是數字。試試'data $ state <-as.character(data $ State)'和'data [,c(11,17,23)] - as.numeric(as.character(data [,c(11,17,23 )]))' – jeremycg
您也可以使用'read.csv(「result-of-care-measures.csv」,na.strings =「Not Available」)來消除自動強制因子 –
您是否知道當你將它傳遞給多列時的順序行爲? – Vlo