-
Notifications
You must be signed in to change notification settings - Fork 1
/
rankall_old.R
91 lines (75 loc) · 2 KB
/
rankall_old.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# return data ranking rate by state
rankall <- function(outcome,num = "best"){
data <- read.csv("outcome-of-care-measures.csv",colClasses="character")
str_outcome <- c("heart attack","heart failure","pneumonia")
if (!outcome %in% str_outcome){ stop("invalid outcome") }
# heart attack
data[,11] <- suppressWarnings(as.numeric(data[,11]))
# heart failure
data[,17] <- suppressWarnings(as.numeric(data[,17]))
# pneumonia
data[,23] <- suppressWarnings(as.numeric(data[,23]))
# clean up NA
# cc <- complete.cases(data)
# data <- data[cc,]
# outcome index and outcome t_data
if (outcome == 'heart attack') {
idx = 11
t_data <- data[!is.na(data[,idx]),]
}else if (outcome == 'heart failure') {
idx = 17
t_data <- data[!is.na(data[,idx]),]
} else {
idx = 23
t_data <- data[!is.na(data[,idx]),]
}
ranks <- function(X,num) {
# return ranking rates based on num
# - best, worst or number
#
if (num == "best"){
return(min(X))
}
else if (num == "worst") {
#print(X)
#print(max(X))
return(max(X))
}
else {
num <- as.integer(num)
if (!is.na(num) & num <= length(X))
{
ord <- order(X)
return(X[ord[num]])
}
return(NA)
}
return(NA)
}
#
rank_val <- tapply(t_data[,idx],t_data$State,ranks,num)
extract_rank_data <- function(x,data,index,num)
{
# extract rank data based on ranks rating
# x is list of rank rating
#
ret <- data.frame()
#print(index)
for (i in 1:length(x)) {
st <- names(x[i])
val <- x[i]
if (!is.na(val)){
if (num == 'worst')
tmp <- data[data$State == st & data[,index]>=val,]
else
tmp <- data[data$State == st & data[,index]<=val,]
tmp <- tmp[,c(2,7)]
ret <- rbind(ret, tmp)
}
}
return(ret)
}
ret <- extract_rank_data(rank_val,t_data,idx,num)
names(ret) <- c("hospital","state")
return(ret)
}