какой синтаксис используется для выбора строки после использования функции заказа? - PullRequest
0 голосов
/ 22 октября 2019

У меня есть этот код, который получает три аргумента. Это сужается государством. Это тогда сужается условием. Наконец, он сужается по рангу больницы в зависимости от его состояния (сердечный приступ, сердечная недостаточность или пневмония). Для этого кода я работаю над частью кода, связанной с сердечной недостаточностью, поэтому две другие можно игнорировать. Функция заказа хорошо определяет частоту сердечной недостаточности. Однако после этого у меня возникают трудности с выбором рейтинга.

best("AK","heart failure", 3)

best <- function(state, outcome, num) {   
  #Reads the csv file
  dataTable  <- read.csv("outcome.csv", header = TRUE, stringsAsFactors = FALSE)

  #Passes the state argument to the choice variable
  choice <- state
  stateOfChoice <- dataTable[dataTable$State == choice,]

  #Makes sure that only three of outcomes found in the csv file are selected
  if(outcome != "heart failure" && outcome != "heart attack" && outcome != "pneumonia"){
     print("wrong condition, try again")
     main()
   }

   #using the selected rows from above, return the minimum value of rate from heart attack and then use this selected row to find the hospital name
   else if (outcome == "heart attack"){
     heart_attack <- stateOfChoice[which.min(stateOfChoice$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack), ]
     hospital <- heart_attack$Hospital.Name

     return(hospital)
   }

   #Similar as above, but instead with heart failure
   else if (outcome == "heart failure"){
     orderState <- stateOfChoice[order(as.integer(stateOfChoice$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure), decreasing = FALSE),]
        orderStateNum <- orderState$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure[[num]]

      ##heart_failure <- stateOfChoice[which.min(stateOfChoice$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure),]
        hospital <- orderStateNum$Hospital.Name
        return(hospital)
    }

    #Similar as above, but instead with pneumonia
    else if (outcome == "pneumonia"){
       pneumonia <- stateOfChoice[which.min(stateOfChoice$Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia),]
       hospital <- pneumonia$Hospital.Name
       return(hospital)
    } 
}

Например, вы можете видеть, что функция order правильно упорядочила строки по этой переменной из-за orderState <- stateOfChoice[order(as.integer(stateOfChoice$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure),decreasing = FALSE),] для условия heart failure. Третий выбор должен быть #100, что соответствует названию больницы Mat-su regional medical center. Я не получаю это название больницы. Я получаю #101, что соответствует районной больнице Бартлетта.

   Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure

115                                                       10.8
104                                                       11.2

100                                                       11.4

114                                                       11.4
101                                                       11.6

Данные здесь:

Пожалуйста, нажмите для набора данных

1 Ответ

0 голосов
/ 22 октября 2019

Не обязательно понять, что вы пытаетесь сделать. Кроме того, ваш код не работает должным образом, и я получаю следующую ошибку:

Error in orderStateNum$Hospital.Name (from so.R!hf5Gh5#27) : 
  $ operator is invalid for atomic vectors

Я полагаю, что ваша цель состоит в том, чтобы получить номер названия больницы num в вашем отсортированном наборе данных. Вы можете заменить текущий код на этот, в нужном месте:

   #Similar as above, but instead with heart failure
   else if (outcome == "heart failure"){
       orderState <- stateOfChoice[order(stateOfChoice$Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure, decreasing = FALSE), ]
       return(orderState[num, "Hospital.Name"])
   }

В вашем коде были различные проблемы. Наиболее важным было следующее: ваша инструкция as.integer не имеет смысла, поскольку вы пытаетесь отсортировать десятичные числа. Вы должны обязательно удалить это. Кроме того, возможно, вам не следует хранить данные таким образом: «Не доступно» делает все числовые переменные распознаваемыми как символьные векторы. У вас может быть на то веская причина, но это звучит довольно рискованно.

Вам также следует соответствующим образом изменить / адаптировать другие части кода.

...