rankhospital<- function(state, outcome, num = "best")
{
outcome1 <- read.csv("outcome-of-care-measures.csv",
colClasses = "character")
if(!any(state == outcome1$State)){
stop("invalid state")}
else if((outcome %in% c("heart attack", "heart failure",
"pneumonia")) == FALSE) {
stop(print("invalid outcome"))
}
outcome2 <- subset(outcome1, State == state)
if (outcome == "heart attack") {
colnum <- 11
}
else if (outcome == "heart failure") {
colnum <- 17
}
else {
colnum <- 23
}
outcome2[ ,colnum] <- as.numeric(outcome2[ ,colnum])
**outcome3 <- outcome2[order(outcome2[ ,colnum],outcome2[,2]), ]**
outcome3 <- outcome3[(!is.na(outcome3[ ,colnum])),]
if(num == "best"){
num <- 1
}
else if (num == "worst"){
num <- nrow(outcome3)
}
return(outcome3[num,2])
}
# example output:
> rankhospital("NC", "heart attack", "worst")
> [1] "WAYNE MEMORIAL HOSPITAL"嗨,我正在研究这组代码,它是根据三种疾病的死亡率对美国各州的医院进行排名的,死亡率越低,医院就越好。我当时正在阅读和研究代码,并被
outcome3 <- outcome2[order(outcome2[ ,colnum],outcome2[,2]), ]最基本的是,在数据集中,第11、17和23栏是每种疾病的死亡率,第2栏是“医院名称”,第7栏是" state ",这是每个耗散性疾病的对应状态。让我困惑的代码是将某一疾病的死亡率从一个州的最低到最高排序,并给医院的名字下命令。但这对我来说没有任何意义,因为排序函数似乎将死亡率-- outcome2、colnum和医院名称--排序为2,2,如果它们之间不相对应,那么就没有意义,因为结果不会返回死亡率排名的医院名称。但这条线应该是正确的,并对死亡率和相应的医院名称进行排序。我希望有人能帮助我解释这一行代码是如何工作的。谢谢你,苏
发布于 2022-01-13 12:01:18
感谢上面的评论,我阅读了“帮助”页面,并看到了其中的示例是如何工作的。我只想解释一下这种情况:
outcome3 <- outcome2[order(outcome2[ ,colnum],outcome2[,2]), ]在这一行中,outcome2[ ,colnum]将输出死亡率,order()将将数据排序从最小到最大,而每列中的其余行也将根据这个新顺序更改位置。因此,对于这种情况,不需要添加医院名称,这是作为参数的order()的第二列。
然而,在死亡率数据的排序中,可能会有一些数据具有相同的数值,这意味着某些医院对某种疾病的死亡率可能是相同的,因此,“医院名称”作为order()的第二个论点,将死亡率从"a“排序为"z”。
因此,基本思想是,order()对一列(第一arg)中的数据进行排序,如果出现一致数据,则order()将对该一致性数据的第二个参数(另一列)进行排序,这将根据参数1的顺序将其他列中的对应数据重新定位。
https://stackoverflow.com/questions/70685797
复制相似问题