R é uma linguagem de programação para manipulação, visualização e análise de dados. Vamos usar o RStudio, um ambiente de desenvolvimento integrado para R que facilita o uso da linguagem. Nessa Introdução ao R vamos nos aprofundar na manipulação de dados. Contudo, é muito importante que você acesse antes o conteúdo sobre R básico do Curso-R até a sessão Objetos inteira, ou seja, pare antes da sessão Controle de Fluxos.
Essa introdução não tem como enfoque a manipulação de dados de data frames. No decorrer dela temos sessões de códigos do R e explanação sobre eles. Para acessar o código basta clicar no Code. Para melhor fixação vá reproduzindo no seu RStudio e fazendo seus próprios comentários nos códigos. Se aparecer algum erro na execução do código, copie e cole o erro no stackoverflow. Se não conseguir resolver o problema sozinha entre em contato comigo por e-mail: camilabezerra@usp.br
Quando trabalhamos com dados no R é importante que estejam organizados de forma tidy em um data frame. Para isso, cada linha deve representar uma observação e cada coluna uma variável.
Características de um data frame (dados tidy):
* Coluna: variável;
* Linha: observação. A tabela abaixo mostra um data frame com seis observações e cinco variáveis. A primeira coluna id é uma variável de identificação da observação, portanto não devemos fazer análises descritivas dela e nem incluí-la no nosso modelo. Essa variável id pode ser útil quando queremos juntar várias bases de dados.
| id | Nome | Idade | Profissão | Ideologia | |
|---|---|---|---|---|---|
| 1 | Claudia | 29 | Médica | Esquerda | |
| 2 | Marcela | 30 | Escritora | Direita | |
| 3 | Gustavo | 31 | Professor | Direita | |
| 4 | Vitória | 32 | Desenvolvedora | Esquerda | |
| 5 | João | 33 | Publicitário | Esquerda | |
| 6 | Arthur | 34 | Cantor | Direita |
A seguir abriremos outros data frames disponíveis no pacote ‘datasets’ do R. Para tanto, primeiro precisamos instalar e abrir o pacote. O código está disponível abaixo.
É uma boa prática no R comentar nossos códigos para que as outras pessoas possam entender o que estamos fazendo. Para comentar usamos o ‘#’.
# instalando datasets
## Para instalar pacotes usamos a funcao install.packages() e o nome do pacote entre " "
install.packages("datasets")
# Carregar pacote
## Para carregar pacotes usamos a funcao library e o nome do pacote.
library(datasets)
# Buscando ajuda sobre um pacote
help(package = "datasets")
Após carregarmos o pacote, vamos explorar a base de dados “mtcars”.
# Carregando uma base de dados interna do pacote datasets
data("mtcars")
#visualizando a base de dados
View(mtcars)
#buscando informacoes sobre o dataset
?mtcars
## starting httpd help server ... done
A função View() usada acima para visualizar a base de dados não é tão aconselhável, porque abre a base inteira em outra aba. Quando queremos visualizar rapidamente usamos as funções head() e tail(). Para sabermos o que elas fazem exatamente vamos usar o ‘?’ e o ‘help()’. Estes dois são úteis se quisermos saber mais sobre uma função R. Te aconselho a sempre usá-las quando se deparar com uma nova função.
#buscando informacoes sobre a funcao
?head()
#buscando informacoes sobre a funcao
help(tail)
Portanto, o head() retorna as primeiras observações da base, enquanto que a tail() retorna as últimas.
O dataset já está organizado no formato tidy, cada observação está numa linha e cada variável numa coluna.
# imprindo as 6 primeiras observacoes do dataset
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# imprimindo as 6 ultimas observacoes do dataset
tail(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.7 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.5 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.5 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.6 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.6 1 1 4 2
Se quisermos informações sobre os tipos de variáveis e o número de observações empregamos a função str(), que retorna a estrutura do dataset.
O “mtcars” tem 32 observações e 11 variáveis. Todas são numéricas.
str(mtcars)
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
Para obter apenas o número de linhas e colunas recorremos às funções nrow(), ncol() e dim().
# retornando o numero de observacoes
nrow(mtcars)
## [1] 32
# retornando o numero de colunas
ncol(mtcars)
## [1] 11
#retornando o numero de linhas e colunas
dim(mtcars)
## [1] 32 11
A função names() retorna os nomes das variáveis.
#retornando os nomes das colunas da base
names(mtcars)
## [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear"
## [11] "carb"
A base de dados “mtcars” fica disponível no environment do R quando a carregamos. Se quisermos excluí-la do nosso ambiente utilizamos a função rm().
#removendo o objeto do nosso ambiente
rm(mtcars)
Antes de elaborar um data frame no R, precisamos aprender a criar vetores e salvar cada um em objeto que ficará disponível no nosso environment. Para atribuir o vetor a um objeto usamos a “<-”. E o c() para concatenar todos os valores no vetor.
Para criar uma variável categórica, precisamos que os valores estejam entre "", caso contrário o R retornará um erro. É uma boa prática não colocar acentos nos nomes das variáveis.
# criando um vetor
nome <- c("Claudia", "Marcela", "Gustavo", "Vitória", "João", "Arthur")
idade <- c(29, 30, 31, 32, 33, 34)
profissao <- c("Médica", "Escritora", "Professor", "Desenvolvedora", "Publicitário", "Cantor")
esquerda <- c(T, F, FALSE, TRUE, T, F)
Para gerar o data frame é importante que os vetores tenham o mesmo comprimento. A função length() retorna o tamanho do objeto, isto é, quantas observações têm em cada objeto.
#printando o numero de observacoes do vetor
length(nome)
## [1] 6
length(idade)
## [1] 6
length(profissao)
## [1] 6
length(esquerda)
## [1] 6
Agora que já criamos os vetores e nos certificamos de que os vetores têm o mesmo tamanho, produziremos o data frame com a função data.frame().
#criando um data frame
dados <- data.frame(nome, idade, profissao, esquerda)
Para carregarmos um dataset de uma pasta do computador temos que checar o diretório no qual o R está operando. A função getwd() faz isso. E a setwd() muda o diretório. Porque se o arquivo não estiver no mesmo diretório, precisaremos mudar o diretório do R, ou especificar o caminho correto na função read.csv().
#checando o diretorio
getwd()
#mudando o diretorio
setwd('C:/.../.../')
#carregando o dataset
df <- read.csv('C:/.../.../dados.csv', sep = ',')
Também podemos carregar base de dados que não estão salvas no nosso computador. Basta especificarmos o link do arquivo csv entre " " dentro da função read.csv(). Como as colunas estão separadas por “;” no arquivo csv dos Dados Abertos da Prefeitura de São Paulo, devemos especificar isso com o argumento “sep = ‘;’” dentro da função.
#buscando informacoes sobre a funcao read.csv
?read.csv()
# carregando e salvando o arquivo csv no ambiente global
dados_sp <- read.csv("http://dados.prefeitura.sp.gov.br/pt_PT/dataset/12a101f0-622b-43ad-946c-95c430ae6cab/resource/6e1da92c-c518-407f-bf20-f246a4ef10ca/download/perfilservidor2019.csv", sep = ';')
Como de praxe, primeiro vamos verificar se os dados estão organizados na estrutura tidy com as funções head() e tail(). Mas dessa vez, especificaremos quantas linhas serão impressas com o argumento “n = 3” dentro das funções.
#imprimindo as 3 primeiras linhas
head(dados_sp, n = 3)
## CD_CAR_SERV_SME MES_NASC ANO_NASC IDADE CD_SEXO CD_MUNICIPIO_NASC
## 1 54385 7 1949 70 M 3550308
## 2 54643 9 1948 71 F 3550308
## 3 55056 6 1951 68 F 3506300
## DC_MUNICIPIO_NASC UF_MUNICIPIO_NASC CD_PAIS_NASC DC_PAIS_NASC
## 1 SAO PAULO SP 10 BRASIL
## 2 SAO PAULO SP 10 BRASIL
## 3 BERNARDINO DE CAMPOS SP 10 BRASIL
## CD_MUNICIPIO_RES DC_MUNICIPIO_RES UF_MUNICIPIO_RES CD_RACA_COR DC_RACA_COR
## 1 3550308 SAO PAULO SP 6 NAO INFORMADA
## 2 3550308 SAO PAULO SP 6 NAO INFORMADA
## 3 3550308 SAO PAULO SP 6 NAO INFORMADA
## CD_DEF DC_DEF NIVEL_FORM DC_SIT_FUNC CD_CARGO_BASE
## 1 15 NAO POSSUI SUPERIOR EFETIVO 3280
## 2 15 NAO POSSUI SUPERIOR EFETIVO 3352
## 3 15 NAO POSSUI SUPERIOR EFETIVO 3875
## DC_CARGO_BASE CD_AREA_ATUACAO_BASE DC_AREA_ATUACAO_BASE
## 1 PROF.ENS.FUND.II E MED.-HISTORIA 3 ENSINO FUNDAMENTAL II
## 2 SUPERVISOR ESCOLAR 8 TECNICA PEDAGOGICA
## 3 PROF.DE ED.INFANTIL 1 EDUCACAO INFANTIL
## DT_INICIO_CARGO_BASE CD_UNIDADE_BASE TP_UNIDADE_BASE
## 1 02/06/2003 00:00 93823 EMEF
## 2 21/01/2000 00:00 108902 DIR EDUC
## 3 04/04/2006 00:00 400522 CEU CEI
## DC_UNIDADE_BASE SIGLA_LOTACAO TP_LOTACAO CD_CARGO_ATUAL
## 1 HENRIQUE FELIPE DA COSTA - HENRICAO MP D 3280
## 2 SUPERVISAO ESCOLAR - PE PE D 3352
## 3 PERA MARMELO PJ D 3875
## DC_CARGO_ATUAL CD_AREA_ATUACAO_ATUAL DC_AREA_ATUACAO_ATUAL
## 1 PROF.ENS.FUND.II E MED.-HISTORIA 3 ENSINO FUNDAMENTAL II
## 2 SUPERVISOR ESCOLAR 8 TECNICA PEDAGOGICA
## 3 PROF.DE ED.INFANTIL 1 EDUCACAO INFANTIL
## CD_UNIDADE_ATUAL TP_UNIDADE_ATUAL DC_UNIDADE_ATUAL
## 1 93823 EMEF HENRIQUE FELIPE DA COSTA - HENRICAO
## 2 108902 DIR EDUC SUPERVISAO ESCOLAR - PE
## 3 400522 CEU CEI PERA MARMELO
## SIGLA_ATUAL CD_FUNCAO DC_FUNCAO CD_UNIDADE_FUNCAO DT_INICIO_FUNCAO
## 1 MP NA NA
## 2 PE NA NA
## 3 PJ NA NA
## CD_UNIDADE_SOBREPOSTO CD_SOBREPOSTO DC_SOBREPOSTO DT_INICIO_SOBREPOSTO
## 1 NA NA
## 2 NA NA
## 3 NA NA
## DATA_BASE
## 1 Dez de 2019
## 2 Dez de 2019
## 3 Dez de 2019
#imprimindo as 3 ultimas linhas
tail(dados_sp, n =3)
## CD_CAR_SERV_SME MES_NASC ANO_NASC IDADE CD_SEXO CD_MUNICIPIO_NASC
## 80436 2835371 2 1987 32 M 3550308
## 80437 2835821 9 1964 55 M 3550308
## 80438 2835761 2 1978 41 F 3549102
## DC_MUNICIPIO_NASC UF_MUNICIPIO_NASC CD_PAIS_NASC DC_PAIS_NASC
## 80436 SAO PAULO SP 10 BRASIL
## 80437 SAO PAULO SP 10 BRASIL
## 80438 SAO JOAO DA BOA VISTA SP 10 BRASIL
## CD_MUNICIPIO_RES DC_MUNICIPIO_RES UF_MUNICIPIO_RES CD_RACA_COR
## 80436 3550308 SAO PAULO SP 1
## 80437 3550308 SAO PAULO SP 6
## 80438 3550308 SAO PAULO SP 1
## DC_RACA_COR CD_DEF DC_DEF NIVEL_FORM DC_SIT_FUNC
## 80436 BRANCA 15 NAO POSSUI MÉDIO OU INFERIOR EM COMISSAO
## 80437 NAO INFORMADA 15 NAO POSSUI MÉDIO OU INFERIOR EM COMISSAO
## 80438 BRANCA 15 NAO POSSUI MÉDIO OU INFERIOR EM COMISSAO
## CD_CARGO_BASE DC_CARGO_BASE CD_AREA_ATUACAO_BASE
## 80436 96 ASSESSOR TECNICO II 9
## 80437 511 COORDENADOR DE ESPORTES E LAZER 8
## 80438 95 ASSESSOR TECNICO I 9
## DC_AREA_ATUACAO_BASE DT_INICIO_CARGO_BASE CD_UNIDADE_BASE TP_UNIDADE_BASE
## 80436 ADMINISTRATIVA 30/10/2019 00:00 110051 OUT-PMSP
## 80437 TECNICA PEDAGOGICA 05/11/2019 00:00 108100 DIR EDUC
## 80438 ADMINISTRATIVA 13/11/2019 00:00 123000 COORD
## DC_UNIDADE_BASE SIGLA_LOTACAO TP_LOTACAO
## 80436 ASSESSORIA JURIDICA - SME-AJ GA D
## 80437 DIRETORIA REGIONAL DE EDUCACAO BUTANTA BT D
## 80438 COORDENADORIA DE ALIMENTACAO ESCOLAR - CODAE GA D
## CD_CARGO_ATUAL DC_CARGO_ATUAL CD_AREA_ATUACAO_ATUAL
## 80436 96 ASSESSOR TECNICO II 9
## 80437 511 COORDENADOR DE ESPORTES E LAZER 8
## 80438 95 ASSESSOR TECNICO I 9
## DC_AREA_ATUACAO_ATUAL CD_UNIDADE_ATUAL TP_UNIDADE_ATUAL
## 80436 ADMINISTRATIVA 110051 OUT-PMSP
## 80437 TECNICA PEDAGOGICA 108100 DIR EDUC
## 80438 ADMINISTRATIVA 123000 COORD
## DC_UNIDADE_ATUAL SIGLA_ATUAL CD_FUNCAO
## 80436 ASSESSORIA JURIDICA - SME-AJ GA NA
## 80437 DIRETORIA REGIONAL DE EDUCACAO BUTANTA BT NA
## 80438 COORDENADORIA DE ALIMENTACAO ESCOLAR - CODAE GA NA
## DC_FUNCAO CD_UNIDADE_FUNCAO DT_INICIO_FUNCAO CD_UNIDADE_SOBREPOSTO
## 80436 NA NA
## 80437 NA NA
## 80438 NA NA
## CD_SOBREPOSTO DC_SOBREPOSTO DT_INICIO_SOBREPOSTO DATA_BASE
## 80436 NA Dez de 2019
## 80437 NA Dez de 2019
## 80438 NA Dez de 2019
# Verificando quntas observacoes e colunas existem no dataset
dim(dados_sp)
## [1] 80438 46
Essa base de dados contém microdados sobre o perfil dos servidores da educação de 2019. Como podemos observar acima, os dados estão no formato tidy, a unidade de observação é no nível do servidor. Existem 80439 observações e 46 variáveis. A função str() que retorna a estrutura dos dados indica que grande parte dos dados foram lidos como ‘int’ (números inteiros) e ‘Factor’ (fator).
str(dados_sp)
## 'data.frame': 80438 obs. of 46 variables:
## $ CD_CAR_SERV_SME : int 54385 54643 55056 1658384 56102 56204 56264 1650303 56532 2217036 ...
## $ MES_NASC : int 7 9 6 7 5 2 4 10 5 2 ...
## $ ANO_NASC : int 1949 1948 1951 1950 1952 1952 1956 1953 1949 1957 ...
## $ IDADE : int 70 71 68 69 67 67 63 66 70 62 ...
## $ CD_SEXO : Factor w/ 4 levels "f","F","m","M": 4 2 2 2 2 4 2 2 2 2 ...
## $ CD_MUNICIPIO_NASC : int 3550308 3550308 3506300 4106407 3549102 3550308 3550308 3540101 3537404 3550308 ...
## $ DC_MUNICIPIO_NASC : Factor w/ 2511 levels "","ABAETE","ABAIARA",..: 2200 2200 273 639 2133 2200 2200 1799 1715 2200 ...
## $ UF_MUNICIPIO_NASC : Factor w/ 28 levels "","AC","AL","AM",..: 27 27 27 19 27 27 27 27 27 27 ...
## $ CD_PAIS_NASC : int 10 10 10 10 10 10 10 10 10 10 ...
## $ DC_PAIS_NASC : Factor w/ 28 levels "","Ã\215NDIA",..: 8 8 8 8 8 8 8 8 8 8 ...
## $ CD_MUNICIPIO_RES : int 3550308 3550308 3550308 3550308 2513851 3550308 3550308 3550308 3550308 3550308 ...
## $ DC_MUNICIPIO_RES : Factor w/ 97 levels "","APARECIDA",..: 80 80 80 80 72 80 80 80 80 80 ...
## $ UF_MUNICIPIO_RES : Factor w/ 3 levels "","RS","SP": 3 3 3 3 3 3 3 3 3 3 ...
## $ CD_RACA_COR : int 6 6 6 6 1 6 6 1 4 6 ...
## $ DC_RACA_COR : Factor w/ 7 levels "AMARELA","BRANCA",..: 4 4 4 4 2 4 4 2 1 4 ...
## $ CD_DEF : int 15 15 15 15 15 15 15 15 15 15 ...
## $ DC_DEF : Factor w/ 12 levels "ALTAS HABILIDADES/SUPERDOTACAO",..: 10 10 10 10 10 10 10 10 10 10 ...
## $ NIVEL_FORM : Factor w/ 3 levels "MÉDIO","MÉDIO OU INFERIOR",..: 3 3 3 3 3 3 3 3 3 3 ...
## $ DC_SIT_FUNC : Factor w/ 6 levels "ADMIT. ESTAVEL",..: 5 5 5 5 5 5 5 5 5 5 ...
## $ CD_CARGO_BASE : int 3280 3352 3875 3298 3301 3255 3336 3298 3336 3336 ...
## $ DC_CARGO_BASE : Factor w/ 93 levels "AGENTE DA ADM. - VIGILANCIA",..: 76 93 63 79 78 67 65 79 65 65 ...
## $ CD_AREA_ATUACAO_BASE : int 3 8 1 3 3 3 3 3 3 3 ...
## $ DC_AREA_ATUACAO_BASE : Factor w/ 10 levels "ADMINISTRATIVA",..: 5 10 3 5 5 5 5 5 5 5 ...
## $ DT_INICIO_CARGO_BASE : Factor w/ 5729 levels "01/01/2004 00:00",..: 281 3805 619 3769 3249 3022 2581 146 3879 18 ...
## $ CD_UNIDADE_BASE : int 93823 108902 400522 94129 95516 95214 94901 19275 94765 10138 ...
## $ TP_UNIDADE_BASE : Factor w/ 19 levels "CEI DIRET","CEMEI",..: 13 10 4 13 13 13 13 13 13 13 ...
## $ DC_UNIDADE_BASE : Factor w/ 1572 levels "13 DE MAIO","19 DE NOVEMBRO",..: 622 1433 1292 601 630 213 471 563 1104 492 ...
## $ SIGLA_LOTACAO : Factor w/ 17 levels "BT","CL","CS",..: 11 12 13 12 15 14 10 2 10 14 ...
## $ TP_LOTACAO : Factor w/ 3 levels "","D","P": 2 2 2 2 2 2 2 2 2 2 ...
## $ CD_CARGO_ATUAL : int 3280 3352 3875 3298 3301 3255 3336 3298 3336 3336 ...
## $ DC_CARGO_ATUAL : Factor w/ 105 levels "AGENTE DA ADM. - VIGILANCIA",..: 87 104 75 90 89 79 77 90 77 77 ...
## $ CD_AREA_ATUACAO_ATUAL: int 3 8 1 3 3 3 3 3 3 3 ...
## $ DC_AREA_ATUACAO_ATUAL: Factor w/ 10 levels "ADMINISTRATIVA",..: 5 10 3 5 5 5 5 5 5 5 ...
## $ CD_UNIDADE_ATUAL : int 93823 108902 400522 94129 95516 95214 94901 19275 94765 10138 ...
## $ TP_UNIDADE_ATUAL : Factor w/ 21 levels "CCI/CIPS","CEI DIRET",..: 14 11 5 14 14 14 14 14 14 14 ...
## $ DC_UNIDADE_ATUAL : Factor w/ 1689 levels "13 DE MAIO","19 DE NOVEMBRO",..: 674 1548 1384 653 682 222 522 614 1158 543 ...
## $ SIGLA_ATUAL : Factor w/ 18 levels "BT","CL","CS",..: 12 13 14 13 16 15 11 2 11 15 ...
## $ CD_FUNCAO : int NA NA NA NA NA NA NA NA NA NA ...
## $ DC_FUNCAO : Factor w/ 28 levels "","CIEJA ASSIST COORD GERAL",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ CD_UNIDADE_FUNCAO : int NA NA NA NA NA NA NA NA NA NA ...
## $ DT_INICIO_FUNCAO : Factor w/ 1374 levels "","01/01/2003 00:00",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ CD_UNIDADE_SOBREPOSTO: int NA NA NA NA NA NA NA NA NA NA ...
## $ CD_SOBREPOSTO : int NA NA NA NA NA NA NA NA NA NA ...
## $ DC_SOBREPOSTO : Factor w/ 35 levels "","ASSESSOR I",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ DT_INICIO_SOBREPOSTO : Factor w/ 1305 levels "","01/01/2009 00:00",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ DATA_BASE : Factor w/ 1 level "Dez de 2019": 1 1 1 1 1 1 1 1 1 1 ...
A função str() retorna a estrutura do dataframe bem como a classe das variáveis. Para ver a classe de uma variável específica usamos a função class(). E o operador $ para selecionar a variável do dataset.
#checando a classe da base de dados
class(dados_sp)
## [1] "data.frame"
# imprimindo os nomes das variaveis
names(dados_sp)
## [1] "CD_CAR_SERV_SME" "MES_NASC" "ANO_NASC"
## [4] "IDADE" "CD_SEXO" "CD_MUNICIPIO_NASC"
## [7] "DC_MUNICIPIO_NASC" "UF_MUNICIPIO_NASC" "CD_PAIS_NASC"
## [10] "DC_PAIS_NASC" "CD_MUNICIPIO_RES" "DC_MUNICIPIO_RES"
## [13] "UF_MUNICIPIO_RES" "CD_RACA_COR" "DC_RACA_COR"
## [16] "CD_DEF" "DC_DEF" "NIVEL_FORM"
## [19] "DC_SIT_FUNC" "CD_CARGO_BASE" "DC_CARGO_BASE"
## [22] "CD_AREA_ATUACAO_BASE" "DC_AREA_ATUACAO_BASE" "DT_INICIO_CARGO_BASE"
## [25] "CD_UNIDADE_BASE" "TP_UNIDADE_BASE" "DC_UNIDADE_BASE"
## [28] "SIGLA_LOTACAO" "TP_LOTACAO" "CD_CARGO_ATUAL"
## [31] "DC_CARGO_ATUAL" "CD_AREA_ATUACAO_ATUAL" "DC_AREA_ATUACAO_ATUAL"
## [34] "CD_UNIDADE_ATUAL" "TP_UNIDADE_ATUAL" "DC_UNIDADE_ATUAL"
## [37] "SIGLA_ATUAL" "CD_FUNCAO" "DC_FUNCAO"
## [40] "CD_UNIDADE_FUNCAO" "DT_INICIO_FUNCAO" "CD_UNIDADE_SOBREPOSTO"
## [43] "CD_SOBREPOSTO" "DC_SOBREPOSTO" "DT_INICIO_SOBREPOSTO"
## [46] "DATA_BASE"
#checando a classe da variavel idade
class(dados_sp$IDADE)
## [1] "integer"
#checando a classe da variavel CD_SEXO
class(dados_sp$CD_SEXO)
## [1] "factor"
#checando a classe da variavel CD_MUNICIPIO_NASC
class(dados_sp$CD_MUNICIPIO_NASC)
## [1] "integer"
Outra forma de selecionar variáveis é através de [], primeiro especificamos a linha e depois a coluna. Linha e colunas devem vir separadas por ‘,’.
# selecionando a segunda e a terceira linhas e a primeira coluna
dados_sp[2:3,1]
## [1] 54643 55056
# selecionando a primeira linha do data frame e todas colunas
dados_sp[1, ]
## CD_CAR_SERV_SME MES_NASC ANO_NASC IDADE CD_SEXO CD_MUNICIPIO_NASC
## 1 54385 7 1949 70 M 3550308
## DC_MUNICIPIO_NASC UF_MUNICIPIO_NASC CD_PAIS_NASC DC_PAIS_NASC
## 1 SAO PAULO SP 10 BRASIL
## CD_MUNICIPIO_RES DC_MUNICIPIO_RES UF_MUNICIPIO_RES CD_RACA_COR DC_RACA_COR
## 1 3550308 SAO PAULO SP 6 NAO INFORMADA
## CD_DEF DC_DEF NIVEL_FORM DC_SIT_FUNC CD_CARGO_BASE
## 1 15 NAO POSSUI SUPERIOR EFETIVO 3280
## DC_CARGO_BASE CD_AREA_ATUACAO_BASE DC_AREA_ATUACAO_BASE
## 1 PROF.ENS.FUND.II E MED.-HISTORIA 3 ENSINO FUNDAMENTAL II
## DT_INICIO_CARGO_BASE CD_UNIDADE_BASE TP_UNIDADE_BASE
## 1 02/06/2003 00:00 93823 EMEF
## DC_UNIDADE_BASE SIGLA_LOTACAO TP_LOTACAO CD_CARGO_ATUAL
## 1 HENRIQUE FELIPE DA COSTA - HENRICAO MP D 3280
## DC_CARGO_ATUAL CD_AREA_ATUACAO_ATUAL DC_AREA_ATUACAO_ATUAL
## 1 PROF.ENS.FUND.II E MED.-HISTORIA 3 ENSINO FUNDAMENTAL II
## CD_UNIDADE_ATUAL TP_UNIDADE_ATUAL DC_UNIDADE_ATUAL
## 1 93823 EMEF HENRIQUE FELIPE DA COSTA - HENRICAO
## SIGLA_ATUAL CD_FUNCAO DC_FUNCAO CD_UNIDADE_FUNCAO DT_INICIO_FUNCAO
## 1 MP NA NA
## CD_UNIDADE_SOBREPOSTO CD_SOBREPOSTO DC_SOBREPOSTO DT_INICIO_SOBREPOSTO
## 1 NA NA
## DATA_BASE
## 1 Dez de 2019
# selecionando todas as linhas da quinta e da sexta colunas
dados_sp[, 5:6]
Também podemos filtrar nossas observações com a função filter() do pacote dplyr que foi desenvolvido para manipulação de dados. Agora, quando quisermos especificar a variável do data frame usaremos o %>%, o famoso pipe. Você pode usar o atalho Ctrl+shift+m ou cmd+shift+m (Mac). Utilizamos o %>% depois da base de dados e o nome da variável dentro da função.
No R podemos especificar o pacote da função, pacote::função(). Mas também é possível usar a função direto. Portanto no código abaixo estou fazendo uma “conexão” com o data frame dados_sp através do %>%. Dentro do filter(), identifico que quero apenas as observações referentes às mulheres. Por isso, CD_SEXO == “F”. O “F” está entre "", porque não é numérico.
#instalando o pacote dplyr
install.packages("dplyr")
# cerragndo o pacote
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# filtrando apenas as mulheres do data frame
dados_sp %>%
dplyr::filter(CD_SEXO == "F")
# filtrando apenas os homens do data frame e salvando em um novo data frame
dados_homens <- dados_sp %>%
dplyr::filter(CD_SEXO == "M")
Usamos o operador lógico == acima para filtramos apenas as observações que têm CD_SEXO igual a F. Além de igual (==) podemos usar outros operadores lógicos também:
maior que
= maior ou igual que
Agora vamos filtrar os servidores que têm mais de 40 anos. Desse modo, a variável é IDADE e o operador lógico é >. Observe que adicionei a função head() ao código para retornar as 6 primeiras linhas. Ademais coloquei outro %>% após filtrar os dados. Porque a cada nova função que vou usar, preciso de outro %>% .
dados_sp %>%
filter(IDADE > 40) %>%
head()
## CD_CAR_SERV_SME MES_NASC ANO_NASC IDADE CD_SEXO CD_MUNICIPIO_NASC
## 1 54385 7 1949 70 M 3550308
## 2 54643 9 1948 71 F 3550308
## 3 55056 6 1951 68 F 3506300
## 4 1658384 7 1950 69 F 4106407
## 5 56102 5 1952 67 F 3549102
## 6 56204 2 1952 67 M 3550308
## DC_MUNICIPIO_NASC UF_MUNICIPIO_NASC CD_PAIS_NASC DC_PAIS_NASC
## 1 SAO PAULO SP 10 BRASIL
## 2 SAO PAULO SP 10 BRASIL
## 3 BERNARDINO DE CAMPOS SP 10 BRASIL
## 4 CORNELIO PROCOPIO PR 10 BRASIL
## 5 SAO JOAO DA BOA VISTA SP 10 BRASIL
## 6 SAO PAULO SP 10 BRASIL
## CD_MUNICIPIO_RES DC_MUNICIPIO_RES UF_MUNICIPIO_RES CD_RACA_COR DC_RACA_COR
## 1 3550308 SAO PAULO SP 6 NAO INFORMADA
## 2 3550308 SAO PAULO SP 6 NAO INFORMADA
## 3 3550308 SAO PAULO SP 6 NAO INFORMADA
## 4 3550308 SAO PAULO SP 6 NAO INFORMADA
## 5 2513851 SANTO ANDRE SP 1 BRANCA
## 6 3550308 SAO PAULO SP 6 NAO INFORMADA
## CD_DEF DC_DEF NIVEL_FORM DC_SIT_FUNC CD_CARGO_BASE
## 1 15 NAO POSSUI SUPERIOR EFETIVO 3280
## 2 15 NAO POSSUI SUPERIOR EFETIVO 3352
## 3 15 NAO POSSUI SUPERIOR EFETIVO 3875
## 4 15 NAO POSSUI SUPERIOR EFETIVO 3298
## 5 15 NAO POSSUI SUPERIOR EFETIVO 3301
## 6 15 NAO POSSUI SUPERIOR EFETIVO 3255
## DC_CARGO_BASE CD_AREA_ATUACAO_BASE DC_AREA_ATUACAO_BASE
## 1 PROF.ENS.FUND.II E MED.-HISTORIA 3 ENSINO FUNDAMENTAL II
## 2 SUPERVISOR ESCOLAR 8 TECNICA PEDAGOGICA
## 3 PROF.DE ED.INFANTIL 1 EDUCACAO INFANTIL
## 4 PROF.ENS.FUND.II E MED.-PORTUGUES 3 ENSINO FUNDAMENTAL II
## 5 PROF.ENS.FUND.II E MED.-MATEMATICA 3 ENSINO FUNDAMENTAL II
## 6 PROF.ENS.FUND.II E MED.-CIENCIAS 3 ENSINO FUNDAMENTAL II
## DT_INICIO_CARGO_BASE CD_UNIDADE_BASE TP_UNIDADE_BASE
## 1 02/06/2003 00:00 93823 EMEF
## 2 21/01/2000 00:00 108902 DIR EDUC
## 3 04/04/2006 00:00 400522 CEU CEI
## 4 20/10/1999 00:00 94129 EMEF
## 5 18/03/1997 00:00 95516 EMEF
## 6 17/02/1986 00:00 95214 EMEF
## DC_UNIDADE_BASE SIGLA_LOTACAO TP_LOTACAO CD_CARGO_ATUAL
## 1 HENRIQUE FELIPE DA COSTA - HENRICAO MP D 3280
## 2 SUPERVISAO ESCOLAR - PE PE D 3352
## 3 PERA MARMELO PJ D 3875
## 4 GUILHERME DE ALMEIDA PE D 3298
## 5 HERALDO BARBUY SM D 3301
## 6 BERNARDO O HIGGINS SA D 3255
## DC_CARGO_ATUAL CD_AREA_ATUACAO_ATUAL
## 1 PROF.ENS.FUND.II E MED.-HISTORIA 3
## 2 SUPERVISOR ESCOLAR 8
## 3 PROF.DE ED.INFANTIL 1
## 4 PROF.ENS.FUND.II E MED.-PORTUGUES 3
## 5 PROF.ENS.FUND.II E MED.-MATEMATICA 3
## 6 PROF.ENS.FUND.II E MED.-CIENCIAS 3
## DC_AREA_ATUACAO_ATUAL CD_UNIDADE_ATUAL TP_UNIDADE_ATUAL
## 1 ENSINO FUNDAMENTAL II 93823 EMEF
## 2 TECNICA PEDAGOGICA 108902 DIR EDUC
## 3 EDUCACAO INFANTIL 400522 CEU CEI
## 4 ENSINO FUNDAMENTAL II 94129 EMEF
## 5 ENSINO FUNDAMENTAL II 95516 EMEF
## 6 ENSINO FUNDAMENTAL II 95214 EMEF
## DC_UNIDADE_ATUAL SIGLA_ATUAL CD_FUNCAO DC_FUNCAO
## 1 HENRIQUE FELIPE DA COSTA - HENRICAO MP NA
## 2 SUPERVISAO ESCOLAR - PE PE NA
## 3 PERA MARMELO PJ NA
## 4 GUILHERME DE ALMEIDA PE NA
## 5 HERALDO BARBUY SM NA
## 6 BERNARDO O HIGGINS SA NA
## CD_UNIDADE_FUNCAO DT_INICIO_FUNCAO CD_UNIDADE_SOBREPOSTO CD_SOBREPOSTO
## 1 NA NA NA
## 2 NA NA NA
## 3 NA NA NA
## 4 NA NA NA
## 5 NA NA NA
## 6 NA NA NA
## DC_SOBREPOSTO DT_INICIO_SOBREPOSTO DATA_BASE
## 1 Dez de 2019
## 2 Dez de 2019
## 3 Dez de 2019
## 4 Dez de 2019
## 5 Dez de 2019
## 6 Dez de 2019