Introdução ao R

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:

Data Frames

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)

Criando um Data Frame

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)

Carregando o dataset de uma pasta

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 = ',')

Carregando um dataset online

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 = ';')

Manipulação de dados

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:

  • < menor que
  • <= menor ou igual a que
  • maior que

  • = maior ou igual que

  • == exatamente igual
  • != diferente
  • ou
  • & e
  • AND e

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