Curso
Se você quer fazer nosso curso gratuito Intro to R, aqui está o link.
Níveis de fatores
Quando você recebe um conjunto de dados, é comum notar que ele contém factors com níveis específicos. Porém, às vezes você vai querer mudar os nomes desses níveis para dar mais clareza ou por outros motivos. O R permite fazer isso com a função levels():
levels(factor_vector) <- c("name1", "name2",...)
Um bom exemplo é o dado bruto coletado em uma pesquisa. Uma pergunta comum em qualquer questionário é sobre o sexo da pessoa respondente. Aqui, por simplicidade, só duas categorias foram registradas, "M" e "F". (Em geral, pesquisas exigem mais categorias; de todo modo, você usa um factor para armazenar dados categóricos.)
survey_vector <- c("M", "F", "F", "M", "M")
Registrar o sexo com as abreviações "M" e "F" pode ser prático se você está coletando dados em papel, mas pode gerar confusão na hora de analisar. Nessa etapa, muitas vezes você vai preferir mudar os níveis do factor para "Male" e "Female" em vez de "M" e "F", para ficar mais claro.
Atenção: a ordem em que você atribui os níveis é importante. Se você digitar levels(factor_survey_vector), verá que a saída é [1] "F" "M". Se você não especificar os níveis do factor ao criar o vetor, o R os atribui em ordem alfabética. Para mapear corretamente "F" para "Female" e "M" para "Male", os níveis devem ser definidos como c("Female", "Male"), nessa ordem.
Instruções
- Confira o código que cria um vetor factor a partir de
survey_vector. Você vai usarfactor_survey_vectorna próxima instrução. - Altere os níveis de
factor_survey_vectorparac("Female", "Male"). Fique de olho na ordem dos elementos.
# no pec
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Code to build factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Specify the levels of factor_survey_vector
levels(factor_survey_vector) <-
factor_survey_vector
# Code to build factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Specify the levels of factor_survey_vector
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
msg = "Do not change the definition of survey_vector!" test_object("survey_vector", undefined_msg = msg, incorrect_msg = msg) msg = "Do not change or remove the code to create the factor vector." test_function("factor", "x", not_called_msg = msg, incorrect_msg = msg) # MC-note: ideally would want to test assign operator <-, and have it highlight whole line. # MC-note: or negate this test_student_typed, to highlight where they type this incorrect phrase # test_student_typed('c("Male", "Female")') test_object("factor_survey_vector", eq_condition = "equal", incorrect_msg = paste("Did you assign the correct factor levels to factor_survey_vector? Use levels(factor_survey_vector) <- c(\"Female\", \"Male\"). Remember that R is case sensitive!")) success_msg("Wonderful! Proceed to the next exercise.")
Preste atenção à ordem em que você deve digitar os níveis do factor. Dica: veja a ordem em que os níveis são impressos ao digitar levels(factor_survey_vector).
Resumindo um factor
Depois de concluir este curso, uma das suas funções favoritas no R vai ser summary(). Ela dá uma visão rápida do conteúdo de uma variável:
summary(my_var)
Voltando à nossa pesquisa, você quer saber quantas respostas "Male" tem no estudo e quantas "Female". A função summary() traz essa resposta.
Instruções
Peça um summary() de survey_vector e de factor_survey_vector. Interprete os resultados dos dois vetores. Neste caso, os dois são igualmente úteis?
# Build factor_survey_vector with clean levels
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Generate summary for survey_vector
# Generate summary for factor_survey_vector
# Build factor_survey_vector with clean levels
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Generate summary for survey_vector
summary(survey_vector)
# Generate summary for factor_survey_vector
summary(factor_survey_vector)
msg = "Do not change anything about the first few lines that define survey_vector and factor_survey_vector." test_object("survey_vector", undefined_msg = msg, incorrect_msg = msg) test_object("factor_survey_vector", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg) msg <- "Have you correctly used summary() to generate a summary for %s?" test_output_contains("summary(survey_vector)", incorrect_msg = sprintf(msg, "survey_vector")) test_output_contains("summary(factor_survey_vector)", incorrect_msg = sprintf(msg, "factor_survey_vector")) success_msg("Nice! Have a look at the output. The fact that you identified \"Male\" and \"Female\" as factor levels in factor_survey_vector enables R to show the number of elements for each category.")
Chame a função summary() para survey_vector e factor_survey_vector. É só isso!
Factors ordenados
Como "Male" e "Female" são níveis de factor não ordenados (ou nominais), o R retorna um aviso dizendo que o operador maior que não faz sentido. Como vimos, o R atribui o mesmo peso aos níveis desses factors.
Mas nem sempre é assim! Às vezes você vai lidar com factors que têm uma ordem natural entre suas categorias. Quando for o caso, é importante passar essa informação para o R...
Suponha que você lidera um time de pesquisa com cinco analistas de dados e quer avaliar o desempenho deles. Para isso, você acompanha a velocidade e classifica cada analista como "slow", "medium" ou "fast", salvando os resultados em speed_vector.
Instruções
Como primeiro passo, atribua a speed_vector um vetor com 5 entradas, uma para cada analista. Cada entrada deve ser "slow", "medium" ou "fast". Use a lista abaixo:
- Analista 1 é medium,
- Analista 2 é slow,
- Analista 3 é slow,
- Analista 4 é medium e
- Analista 5 é fast.
Não precisa definir como factors ainda.
# Create speed_vector
speed_vector <-
# Create speed_vector
speed_vector <- c("medium", "slow", "slow", "medium", "fast")
test_object("speed_vector",
incorrect_msg = "speed_vector should be a vector with 5 entries, one for each analyst's speed rating. Don't use capital letters; R is case sensitive!") success_msg("A job well done! Continue to the next exercise.")
Atribua a speed_vector um vetor contendo as strings "slow", "medium" ou "fast".
Se quiser continuar aprendendo com este curso, aqui está o link.
Confira também o Factors in R Tutorial.
