матрица подмножеств, неверное количество измерений - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь написать функцию, которая может сказать мне n-ю лучшую больницу в каждом штате для лечения определенного заболевания из заданного набора данных.

df - это большой набор данных с множеством столбцов, поэтому я создал my_data, который содержит только нужную мне информацию: названия больниц, состояния и уровень смертности. Затем я приступил к написанию функции, как показано ниже.

Результат, который я ожидаю получить от head (rankall (20)): cbind (c (, «DW MCMILLAN MEMORIAL HOSPITAL», «ARKANSAS METHODIST MEDICAL CENTER», «JOHN C LINCOLN DEER VALLEY БОЛЬНИЦА »,« БОЛЬНИЦА ШЕРМАН-ОУКС »,« МЕДИЦИНСКИЙ ЦЕНТР SKY RIDGE »,« МЕДИЦИНСКИЙ МЕДИЦИНСКИЙ ЦЕНТР »,,,« БОЛЬНИЦА БАПТИСТА ЮЖНОЙ ФЛОРИДЫ »), c (« AK »,« AL »,« AR »,« AZ »,« CA »,« CO »,« CT »,« DC »,« DE »,« FL »))

Однако я получаю ошибку в state_based_data [, 3]: неправильное количество измерений.

Когда я пытаюсь заменить sort (unique (state_names)) на c («AK», «AL», «AR», «AZ», «CA», «CO», «CT», «D C», «DE», «FL»), то я получаю ожидаемый результат для большинства строк, но не для строк 7 и 10. Вместо этого в строке 7 указываются «ROCKVILLE GENERAL HOSPITAL», «CT» и строка 10 дает «БОЛЬНИЦА ВРАЧЕЙ В C», «FL»

Я прошу прощения за множество исправлений и несоответствий, поскольку я только начал использовать эту платформу и учусь писать код. Очень признателен за помощь, которую мне все предлагают.

df <- read.csv("outcome-of-care-measures.csv", colClasses = "character")

hospital_names<- df$Hospital.Name
state_names<- df$State
unique_state_names<- sort(unique(state_names))

#Initialise vector to store output
hospital<-character()

#Narrow down to 3 relevant columns
my_data<- cbind(hospital_names,state_names,df[,11])

rankall<-function(num){

        for(i in unique_state_names){
                state_based_data <- my_data[my_data[,2]==i,]

                #Remove rows containing NAs 
                non_na_rows <- !is.na(as.numeric(state_based_data[,3]))
                my_data2<- state_based_data[non_na_rows,]

                #Rearrange according to mortality rate (3rd column) in ascending order
                ranking <- order(as.numeric(my_data2[,3]))
                my_ordered_data <- my_data2[ranking,] 

                #If the ranking required is higher than the number of hospitals with data available, then output is NA
                if (num>length(ranking)){
                        hospital<-append(hospital,"NA")
                }

                #Otherwise, output is the hospital of that ranking
                else{
                        ranked_hospital <- my_ordered_data[num,1]
                        hospital<-append(hospital,ranked_hospital)
                }

        }
        answer<- cbind(hospital,unique_state_names)
        print(answer)

}

Здесь я включаю некоторые образцы данных, которые я получил с помощью структуры dput(my_data[1:20, ]):

(c («МЕДИЦИНСКИЙ ЦЕНТР ЮГО-ВОСТОЧНОЙ АЛАБАМЫ», «МЕДИЦИНСКИЙ ЦЕНТР МАРШАЛЛА, ЮГ »,« КОФЕ-МЕМОРИАЛЬНАЯ БОЛЬНИЦА ЭЛИЗА »,« МЕМОРИАЛЬНАЯ БОЛЬНИЦА МИЗЕЛЛ »,« ОБЩЕСТВЕННАЯ БОЛЬНИЦА КРЕНШАУ »,« МЕДИЦИНСКИЙ ЦЕНТР МАРШАЛЛ СЕВЕР »,« СЕНТ-ВИНСЕНТС-ВОСТОК »,« ДЕКАЛЬБСКИЙ РЕГИОНАЛЬНЫЙ МЕДИЦИНСКИЙ ЦЕНТР »БАЛТАП EYE FOUNDATION HOSPITAL »,« HELEN KELLER MEMORIAL HOSPITAL »,« DALE MEDICAL CENTER »,« CHEROKEE MEDICAL CENTER »,« BAPTIST MEDICAL CENTER SOUTH »,« JACKSON HOSPITAL & CLINI C IN * GEORGE LANIH. МЕМОРИАЛЬНАЯ БОЛЬНИЦА »,« ОБЩАЯ БОЛЬНИЦА ЭЛЬБА »,« МЕДИЦИНСКИЙ ЦЕНТР ВОСТОЧНОЙ АЛАБАМЫ И SNF »,« БОЛЬНИЦА ВЕДУИ »,« УНИВЕРСИТЕТ АЛАБАМСКОЙ БОЛЬНИЦЫ »,« AL »,« AL »,« AL »,« AL »,« AL » , «AL», «AL», «AL», «AL», «AL», «AL», «AL», «AL», «AL», «AL», «AL», «AL», « AL »,« AL »,« AL »,« 14,3 »,« 18,5 »,« 18,1 »,« Недоступно »,« Недоступно »,« Недоступно »,« 17,7 »,« 18,0 »,« 15,9 », «Недоступно», «19,6», «17,3», «N» ot Available "," 17.8 "," 17.5 "," 15.4 "," Not Available "," 16.3 "," Not Available "," 15.0 "), .Dim = c (20L, 3L), .Dimnames = list (NULL, c ("названия_ больниц", "названия_ состояний", "")))

...