Как упоминание colClasses в read.csv влияет на мою программу на R - PullRequest
0 голосов
/ 24 апреля 2020
best<-function(state,outcome){
  data <- read.csv("outcome-of-care-measures.csv")
  filter<-data.frame(cbind(data[, 2],   # hospital
                              data[, 7],   # state
                              data[, 11],  # heart attack
                              data[, 17],  # heart failure
                              data[, 23]), # pneumonia
                              stringsAsFactors = FALSE)
  chosenState<-state
  colnames(filter) <- c("Hospital", "State", "heart attack", "heart failure", "pneumonia")
  if(!chosenState %in% filter[["State"]]){
    stop('invalid state')
  } 

Приведенный выше код является исходным кодом. Это преобразование значений состояния в цифру c, следовательно, значения подобны 1,2,3 ... Теперь, если я пишу colClasses = "character" в read.csv, тогда это преобразование прекращается, и я получаю значения столбцов в виде символов. Почему это так? Финальный код ниже ->

best<-function(state,outcome){
  data <- read.csv("outcome-of-care-measures.csv",colClasses = "character")
  filter<-data.frame(cbind(data[, 2],   # hospital
                              data[, 7],   # state
                              data[, 11],  # heart attack
                              data[, 17],  # heart failure
                              data[, 23]), # pneumonia
                              stringsAsFactors = FALSE)
  chosenState<-state
  colnames(filter) <- c("Hospital", "State", "heart attack", "heart failure", "pneumonia")
  if(!chosenState %in% filter[["State"]]){
    stop('invalid state')
  } 

1 Ответ

1 голос
/ 24 апреля 2020

Инструкции для Университета Джона Хопкинса Программирование R На задании 3 предоставлен код для считывания данных Outcome of Care в больнице с аргументом colClasses = "character".

enter image description here

Ключевой частью назначения является передача символьных аргументов в три функции, необходимые для назначения. Если данные читаются без colClasses = "character", символьные строки будут преобразованы в коэффициенты, что очень затруднит их использование с функциями, требующими символьных аргументов.

Тестовые случаи для первой функции, best(), следующие:

best("TX","heart attack")

best("MD","heart attack")

best("MD","pneumonia")

best("BB","heart attack")

best("NY","pneumonia")

Как только данные загружены в кадр данных в R, можно исключить ненужные столбцы. и преобразуйте поля цифры c, необходимые для назначения, в числа с as.numeric().

Почему мы не можем оставить результаты в виде символьных переменных?

Назначение в значительной степени зависит от сортировки данных по результатам. Если результаты не преобразуются в цифры c, значения, подобные 14,3, будут отсортированы впереди 2,3, что приведет к неточным результатам для функций, которые будут построены.

Воспроизводимый ответ

Чтобы сделать ответ полностью воспроизводимым, мы можем загрузить данные больницы, поместить их в нужные столбцы и преобразовать цифры c столбцы в цифру c.

if(!file.exists("./data/outcome-of-care-measures.zip")){
     if(!dir.exists("./data")) dir.create("./data")
     url <- "https://d396qusza40orc.cloudfront.net/rprog%2Fdata%2FProgAssignment3-data.zip"
     download.file(url,destfile='./data/outcome-of-care-measures.zip',mode="wb")
     unzip(zipfile = "./data/outcome-of-care-measures.zip",exdir="./data")    
}

# read data & keep only necessary columns 
theData <- read.csv("./data/outcome-of-care-measures.csv",colClasses = "character",
                        na.strings="Not Available")[,c(2,7,11,17,23)]
colnames(theData) <- c("hospital","state","heart attack","heart failure","pneumonia")
theData[3:5]<- lapply(3:5,function(i) as.numeric(theData[,i]))

head(theData) 

... и вывод:

> head(theData)
                          hospital state heart attack heart failure pneumonia
1 SOUTHEAST ALABAMA MEDICAL CENTER    AL         14.3          11.4      10.9
2    MARSHALL MEDICAL CENTER SOUTH    AL         18.5          15.2      13.9
3   ELIZA COFFEE MEMORIAL HOSPITAL    AL         18.1          11.3      13.4
4         MIZELL MEMORIAL HOSPITAL    AL           NA          13.6      14.9
5      CRENSHAW COMMUNITY HOSPITAL    AL           NA          13.8      15.8
6    MARSHALL MEDICAL CENTER NORTH    AL           NA          12.5       8.7
> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...