使用R中的order()函数输出的不一致性(3.2.1)
这是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)而不是列。
让我知道是否有任何信息未提供。任何帮助深表感谢!
也没有必要把它写了三次:
best<-function(state,outcome){
data<-read.csv("outcome-of-care-measures.csv",na.strings="Not Available")
outcomes_valid<-c("heart attack"=11,"heart failure"=17,"pneumonia"=23)
choice <- outcomes_valid[outcome]
if(!outcome %in% names(outcomes_valid)) stop("invalid outcome")
if(!state %in% data$State) stop("invalid state")
df <- data[data$State==state,]
as.character(df$Hospital.Name[order(df[,choice], df$Hospital.Name)][1])}
可以使用指定的载体,寻找的结果和列数的方式。看看我如何编辑outcomes_valid
。另一个重要部分是设置参数na.strings="Not Available"
。默认情况下,此数据集使用“不可用”作为缺失值。
测试
best("TX", "heart attack")
[1] "CYPRESS FAIRBANKS MEDICAL CENTER"
best("TX", "heart failure")
[1] "FORT DUNCAN MEDICAL CENTER"
best("MD", "pneumonia")
[1] "GREATER BALTIMORE MEDICAL CENTER"
谢谢!我唯一的问题是为什么需要“选择”变量?为什么不能仅仅[,结果]就够了? – mentorship
因为“结果”没有附加到任何列,它只是名称。 “选择”具有稍后使用的列号。 –
你的数据被读取为因素而不是数字。试试'data $ state jeremycg
您也可以使用'read.csv(“result-of-care-measures.csv”,na.strings =“Not Available”)来消除自动强制因子 –
您是否知道当你将它传递给多列时的顺序行为? – Vlo