Em nossas últimas aulas, introduzimos o conceito de análise de dados e alguns comandos básicos em R. Nessa aula, vamos avançar mais na linguagem de programação R.

Data Frames

Na aula passada, introduzimos os conceitos de estrutura de dados. De início, vamos avançar um pouco mais na manipulação de data.frames. Para tanto, vamos criar um modelo de exemplo para, depois, experimentarmos os comandos.

set.seed(111)
Idade<-rnorm(mean = 22, sd = 3, n = 10) # o comando rnorm gera "n" números com determinada média (mean) e desvio-padrão (sd)
Sexo<-c( #criando um vetor
  rep(2,6), # comando rep() repete valores. Nesse caso, repetimos o número dois, seis vezes.
  rep(1,4) # repetindo o número um, quatro vezes.
)

Nomes<-c("Renata", "Rúbia", "Regina", "Rosângela", "Roberta", "Rosa", "Renato", "Rubens", "Rogério", "Reginaldo")

dd<-data.frame( # criando data.frame
  Idade = Idade,
  Sexo = Sexo,
  Nomes = Nomes
)

dd
##       Idade Sexo     Nomes
## 1  22.70566    2    Renata
## 2  21.00779    2     Rúbia
## 3  21.06513    2    Regina
## 4  15.09296    2 Rosângela
## 5  21.48737    2   Roberta
## 6  22.42083    2      Rosa
## 7  17.50772    1    Renato
## 8  18.96943    1    Rubens
## 9  19.15457    1   Rogério
## 10 20.51811    1 Reginaldo

Caso eu tenha uma série de conceitos de uma avaliação e consiga ordenar, previamente, segundo os registros do data.frame, eu posso utilizar o comando cbind().

Conceitos<-c("A","B","A","D","A","C","B","D","B","B")
dd<-cbind(dd, Conceitos)
dd
##       Idade Sexo     Nomes Conceitos
## 1  22.70566    2    Renata         A
## 2  21.00779    2     Rúbia         B
## 3  21.06513    2    Regina         A
## 4  15.09296    2 Rosângela         D
## 5  21.48737    2   Roberta         A
## 6  22.42083    2      Rosa         C
## 7  17.50772    1    Renato         B
## 8  18.96943    1    Rubens         D
## 9  19.15457    1   Rogério         B
## 10 20.51811    1 Reginaldo         B

Da mesma forma, podemos incluir uma linha de registro, a partir da adição de um novo vetor.

dd<-rbind(dd,
          c(20,2,"Rosimery","A"))
dd
##               Idade Sexo     Nomes Conceitos
## 1  22.7056621348411    2    Renata         A
## 2  21.0077923851199    2     Rúbia         B
## 3  21.0651285280637    2    Regina         A
## 4  15.0929630247119    2 Rosângela         D
## 5  21.4873718661584    2   Roberta         A
## 6  22.4208346753097    2      Rosa         C
## 7  17.5077200333047    1    Renato         B
## 8  18.9694347428459    1    Rubens         D
## 9  19.1545731851427    1   Rogério         B
## 10 20.5181133482947    1 Reginaldo         B
## 11               20    2  Rosimery         A

Veja que, por cada campo ter um tipo de atributo, mesmo que a tendência fosse todo o vetor se tornar do tipo character, o que observamos é que foi respeitado o tipo de campo presente no data frame.Nós podemos modificar algum registro, a partir dos índices da tabela. Por exemplo, poderíamos mudar o nome da aluna “Rosa” para “Rosane”.

dd$Nomes[dd$Nomes=="Rosa"]<-"Rosane"
dd
##               Idade Sexo     Nomes Conceitos
## 1  22.7056621348411    2    Renata         A
## 2  21.0077923851199    2     Rúbia         B
## 3  21.0651285280637    2    Regina         A
## 4  15.0929630247119    2 Rosângela         D
## 5  21.4873718661584    2   Roberta         A
## 6  22.4208346753097    2    Rosane         C
## 7  17.5077200333047    1    Renato         B
## 8  18.9694347428459    1    Rubens         D
## 9  19.1545731851427    1   Rogério         B
## 10 20.5181133482947    1 Reginaldo         B
## 11               20    2  Rosimery         A

Segmentação de Data frames

Podemos subdividir as tabelas, segundo algum valor de interesse. Comecemos com o comando split() que irá segmentar a tabela segundo alguma categoria.

ss<-split(x=dd,f=dd$Conceitos)
ss
## $A
##               Idade Sexo    Nomes Conceitos
## 1  22.7056621348411    2   Renata         A
## 3  21.0651285280637    2   Regina         A
## 5  21.4873718661584    2  Roberta         A
## 11               20    2 Rosimery         A
## 
## $B
##               Idade Sexo     Nomes Conceitos
## 2  21.0077923851199    2     Rúbia         B
## 7  17.5077200333047    1    Renato         B
## 9  19.1545731851427    1   Rogério         B
## 10 20.5181133482947    1 Reginaldo         B
## 
## $C
##              Idade Sexo  Nomes Conceitos
## 6 22.4208346753097    2 Rosane         C
## 
## $D
##              Idade Sexo     Nomes Conceitos
## 4 15.0929630247119    2 Rosângela         D
## 8 18.9694347428459    1    Rubens         D
class(ss)
## [1] "list"

Vejam que o comando split() cria um objeto do tipo list, com vários objetos do tipo data.frame dentro dele. Contudo, podemos apenas ter o interesse em filtrar somente uma determinada categoria ou um grupo de condições. para tanto, usaremos o comando subset() ao invés de utilizar os índices do objeto, ou mesmo $.

s<-subset(dd,dd$Conceitos=="A")
s
##               Idade Sexo    Nomes Conceitos
## 1  22.7056621348411    2   Renata         A
## 3  21.0651285280637    2   Regina         A
## 5  21.4873718661584    2  Roberta         A
## 11               20    2 Rosimery         A
iii<-subset(dd,dd$Idade>22)
iii
##              Idade Sexo  Nomes Conceitos
## 1 22.7056621348411    2 Renata         A
## 6 22.4208346753097    2 Rosane         C
si<-subset(dd,dd$Idade>22&dd$Conceitos=="A") # o operador '&' tem função de 'E' em teste lógico
si
##              Idade Sexo  Nomes Conceitos
## 1 22.7056621348411    2 Renata         A
si2<-subset(dd,dd$Idade>22|dd$Conceitos=="A") # o operador '|' tem função de 'OU' em teste lógico
si2
##               Idade Sexo    Nomes Conceitos
## 1  22.7056621348411    2   Renata         A
## 3  21.0651285280637    2   Regina         A
## 5  21.4873718661584    2  Roberta         A
## 6  22.4208346753097    2   Rosane         C
## 11               20    2 Rosimery         A

Usaremos bastente os operadores lógicos no futuro.

Carregando dados

Usaremos, a seguir, alguns comandos para carregar e escrever arquivos em formato .csv .xlsx, .dbf e .txt.

scan()

O comando scan() serve para colarmos valores que estão na área de transferência como tabela.

x<-scan()
#aparecerá um espaço para colar valores e transformar o objeto x em uma tabela

O comando scan() irá permitir a inclusão de um vetor de dados por vez.

read.table()

Podemos, contudo, ler diretamente de um arquivo, sem precisar utilizar comandos de copiar e colar. Para tanto, façamos donwload dos arquivos de dados presentes em https://covid.saude.gov.br.

Depois de descompactar, você verá vários arquivos no formato .csv. Estes arquivos referem-se a pandemia de Covid-19, distribuiídos por data e recorte territorial. Nosso objetivo aqui é apenas abrir os arquivos, por enquanto.

Antes de utilizar o comando, precisamos do endereço de onde a pasta está. podemos copiar ou utilizar o comando choose.dir(), que apontará qual a pasta ou diretório, ou o comando choose.files(), que apontará a localização do arquivo.

dd<-read.table("C:\\Users\\letho\\OneDrive\\PROJETO PROFESSOR\\UFJF\\NUDES\\TREINAMENTO R\\PRIMEIRO DIA\\DADOS\\HIST_PAINEL_COVIDBR_30nov2024\\HIST_PAINEL_COVIDBR_2022_Parte2_30nov2024.csv",
               sep = ";",dec = ",",quote = "",header = TRUE)

Vocês podem utilizar o comando View() para visualizar em uma outra aba, ou ainda editar manualmente, com o comando edit(). Também é possível observar apenas as primeiras linhas, ou as últimas:

tail(dd) # mostra, no console, os cinco últimos registros da tabela
##               regiao estado municipio coduf codmun codRegiaoSaude
## 1033891 Centro-Oeste     DF  Brasília    53 530010          53001
## 1033892 Centro-Oeste     DF  Brasília    53 530010          53001
## 1033893 Centro-Oeste     DF  Brasília    53 530010          53001
## 1033894 Centro-Oeste     DF  Brasília    53 530010          53001
## 1033895 Centro-Oeste     DF  Brasília    53 530010          53001
## 1033896 Centro-Oeste     DF  Brasília    53 530010          53001
##          nomeRegiaoSaude       data semanaEpi populacaoTCU2019 casosAcumulado
## 1033891 DISTRITO FEDERAL 2022-12-26        52          3015268         885285
## 1033892 DISTRITO FEDERAL 2022-12-27        52          3015268         886049
## 1033893 DISTRITO FEDERAL 2022-12-28        52          3015268         886923
## 1033894 DISTRITO FEDERAL 2022-12-29        52          3015268         887514
## 1033895 DISTRITO FEDERAL 2022-12-30        52          3015268         888063
## 1033896 DISTRITO FEDERAL 2022-12-31        52          3015268         888063
##         casosNovos obitosAcumulado obitosNovos Recuperadosnovos
## 1033891       1336           11838           0               NA
## 1033892        764           11838           0               NA
## 1033893        874           11838           0               NA
## 1033894        591           11838           0               NA
## 1033895        549           11838           0               NA
## 1033896          0           11838           0               NA
##         emAcompanhamentoNovos interior.metropolitana
## 1033891                    NA                      1
## 1033892                    NA                      1
## 1033893                    NA                      1
## 1033894                    NA                      1
## 1033895                    NA                      1
## 1033896                    NA                      1
head(dd) # mostra, no console, os cinco primeiros registros da tabela
##   regiao estado municipio coduf codmun codRegiaoSaude nomeRegiaoSaude
## 1 Brasil                     76     NA             NA                
## 2 Brasil                     76     NA             NA                
## 3 Brasil                     76     NA             NA                
## 4 Brasil                     76     NA             NA                
## 5 Brasil                     76     NA             NA                
## 6 Brasil                     76     NA             NA                
##         data semanaEpi populacaoTCU2019 casosAcumulado casosNovos
## 1 2022-07-01        26        210147125       32434063      76045
## 2 2022-07-02        26        210147125       32471847      37784
## 3 2022-07-03        27        210147125       32490422      18575
## 4 2022-07-04        27        210147125       32535923      45501
## 5 2022-07-05        27        210147125       32610514      74591
## 6 2022-07-06        27        210147125       32687680      77166
##   obitosAcumulado obitosNovos Recuperadosnovos emAcompanhamentoNovos
## 1          671700         284         30873682                888681
## 2          671858         158         30880584                919405
## 3          671911          53         30906575                911936
## 4          672033         122         30967114                896776
## 5          672429         396         31039055                899030
## 6          672790         361         31077538                937352
##   interior.metropolitana
## 1                     NA
## 2                     NA
## 3                     NA
## 4                     NA
## 5                     NA
## 6                     NA
View(tail(dd,50)) # mostra, em uma aba separada, os 50 últimos registros.
View(head(dd,20)) # mostra, em uma aba separada, os 20 primeiros registros.

read.csv() e read.csv2()

Os comandos read.csv() e read.csv2() lêem arquivos .csv. A diferença é que, enquanto o primeiro lê arquivos com separador , para os campos, segundo utiliza ;. Por isso, em geral, utilizamos no Brasil o read.csv2().

dd<-read.csv("C:\\Users\\letho\\OneDrive\\PROJETO PROFESSOR\\UFJF\\NUDES\\TREINAMENTO R\\PRIMEIRO DIA\\DADOS\\HIST_PAINEL_COVIDBR_30nov2024\\HIST_PAINEL_COVIDBR_2022_Parte2_30nov2024.csv")
head(dd) 
##   regiao.estado.municipio.coduf.codmun.codRegiaoSaude.nomeRegiaoSaude.data.semanaEpi.populacaoTCU2019.casosAcumulado.casosNovos.obitosAcumulado.obitosNovos.Recuperadosnovos.emAcompanhamentoNovos.interior.metropolitana
## 1                                                                                                                                       Brasil;;;76;;;;2022-07-01;26;210147125;32434063;76045;671700;284;30873682;888681;
## 2                                                                                                                                       Brasil;;;76;;;;2022-07-02;26;210147125;32471847;37784;671858;158;30880584;919405;
## 3                                                                                                                                        Brasil;;;76;;;;2022-07-03;27;210147125;32490422;18575;671911;53;30906575;911936;
## 4                                                                                                                                       Brasil;;;76;;;;2022-07-04;27;210147125;32535923;45501;672033;122;30967114;896776;
## 5                                                                                                                                       Brasil;;;76;;;;2022-07-05;27;210147125;32610514;74591;672429;396;31039055;899030;
## 6                                                                                                                                       Brasil;;;76;;;;2022-07-06;27;210147125;32687680;77166;672790;361;31077538;937352;
dd<-read.csv2("C:\\Users\\letho\\OneDrive\\PROJETO PROFESSOR\\UFJF\\NUDES\\TREINAMENTO R\\PRIMEIRO DIA\\DADOS\\HIST_PAINEL_COVIDBR_30nov2024\\HIST_PAINEL_COVIDBR_2022_Parte2_30nov2024.csv")
head(dd)
##   regiao estado municipio coduf codmun codRegiaoSaude nomeRegiaoSaude
## 1 Brasil                     76     NA             NA                
## 2 Brasil                     76     NA             NA                
## 3 Brasil                     76     NA             NA                
## 4 Brasil                     76     NA             NA                
## 5 Brasil                     76     NA             NA                
## 6 Brasil                     76     NA             NA                
##         data semanaEpi populacaoTCU2019 casosAcumulado casosNovos
## 1 2022-07-01        26        210147125       32434063      76045
## 2 2022-07-02        26        210147125       32471847      37784
## 3 2022-07-03        27        210147125       32490422      18575
## 4 2022-07-04        27        210147125       32535923      45501
## 5 2022-07-05        27        210147125       32610514      74591
## 6 2022-07-06        27        210147125       32687680      77166
##   obitosAcumulado obitosNovos Recuperadosnovos emAcompanhamentoNovos
## 1          671700         284         30873682                888681
## 2          671858         158         30880584                919405
## 3          671911          53         30906575                911936
## 4          672033         122         30967114                896776
## 5          672429         396         31039055                899030
## 6          672790         361         31077538                937352
##   interior.metropolitana
## 1                     NA
## 2                     NA
## 3                     NA
## 4                     NA
## 5                     NA
## 6                     NA

read.xlsx()

Para trabalhar como arquivos em format .xlsx, primeiro vamos buscar um exemplo. usaremos o comando download.file() para buscar um arquivo na internet. Vamos usar, como exemplo, a página de dados abertos da SES-MG (https://coronavirus.saude.mg.gov.br/dadosabertos)

download.file(url="https://sescloud.saude.mg.gov.br/index.php/s/ZEzzC8jFpobXGjM/download?path=%2FPAINEL_COVID&files=XLSX_Painel_2023.xlsx",
              destfile = "C:\\Users\\letho\\OneDrive\\PROJETO PROFESSOR\\UFJF\\NUDES\\TREINAMENTO R\\PRIMEIRO DIA\\DADOS\\dados.xlsx",method = "curl")

Reparem que o argumento url contem o endereço do arquivo - copiado da página utilizando o botão direito e “copiar endereço do link” - e o comando destfile corresponde a paste de destino. O método padrão será sempre curl. Você deverá alterar o arquivo de destino para a sua máquina. A partir do arquivo em sua pasta de destino, podemos fazer o carregamento com o comando read.xlsx(). Contudo ele não está presente no pacote básico de comandos do R e, por isso, deverá ser instalado e carregado.

#install.packages("openxlsx", repos = "https://cloud.r-project.org") # openxlsx é o nome do pacote.

# se ele já estiver instalado
library(openxlsx) # carregando o pacote

dados<-read.xlsx("C:\\Users\\letho\\OneDrive\\PROJETO PROFESSOR\\UFJF\\NUDES\\TREINAMENTO R\\PRIMEIRO DIA\\DADOS\\dados.xlsx", sheet = "Plan1", detectDates = TRUE)
head(dados)
##   MUNICIPIO_RESIDENCIA CodigoIBGE                  URS                    Micro
## 1  ABADIA DOS DOURADOS     310010           UBERLÂNDIA PATROCÍNIO/MONTE CARMELO
## 2               ABAETE     310020          SETE LAGOAS              SETE LAGOAS
## 3           ABRE CAMPO     310030             MANHUAÇU                 MANHUAÇU
## 4              ACAIACA     310040           PONTE NOVA               PONTE NOVA
## 5              ACUCENA     310050   CORONEL FABRICIANO                 IPATINGA
## 6             AGUA BOA     310060 GOVERNADOR VALADARES    SANTA MARIA DO SUAÇUÍ
##                Macro       Data Semana.Epidemiologia CONFIRMADOS
## 1 Triângulo Do Norte 2023-01-01           2023 SE 01           4
## 2             Centro 2023-01-01           2023 SE 01          61
## 3       Leste Do Sul 2023-01-01           2023 SE 01           0
## 4       Leste Do Sul 2023-01-01           2023 SE 01          -1
## 5        Vale Do Aço 2023-01-01           2023 SE 01           7
## 6              Leste 2023-01-01           2023 SE 01           3

O argumento sheet serve para identificar qual planilha deve ser aberta, caso o arquivo tenha mais de uma. O argumento detectDates identifica, automaticamente, os campos data.

read.dbf()

O formato .dbf é específico para armazenamento de dados. Existem outros formatos, mas o .dbf é o formato utilizado para relacionar dados aos vetores em arquivos no formato .shp (shapefiles). Vamos buscar um exemplo no site do IBGE. Usaremos o exemplo da malha territorial de municípios, descompactando o .zip após o download.

#install.packages("foreign") # pacote específico para abrir arquivos .dbf
library(foreign)
dados<-read.dbf("C:\\Users\\letho\\OneDrive\\PROJETO PROFESSOR\\UFJF\\NUDES\\TREINAMENTO R\\PRIMEIRO DIA\\DADOS\\AC_Municipios_2022\\AC_Municipios_2022.dbf")
head(dados)
##    CD_MUN          NM_MUN SIGLA_UF AREA_KM2
## 1 1200013      Acrelândia       AC 1811.613
## 2 1200054    Assis Brasil       AC 4979.073
## 3 1200104       Brasiléia       AC 3928.174
## 4 1200138          Bujari       AC 3034.869
## 5 1200179        Capixaba       AC 1705.824
## 6 1200203 Cruzeiro do Sul       AC 8783.470

read.fwf()

O comando read.fwf() oferece uma alternativa de leitura de dados pela posição dos caracteres, quando não há separador de campos. O caso mais frequente de leitura de dados dessa natureza é o censo demográfico brasileiro. Claro que a leitura depende de um dicionário que indique qual a posição de cada campo, bem como o seu comprimento. Façamos download dos dados do Censo Demográfico de 2010, para o Estado do Acre no site do IBGE

ac<-read.fwf("C:\\Users\\letho\\OneDrive\\PROJETO PROFESSOR\\UFJF\\NUDES\\TREINAMENTO R\\PRIMEIRO DIA\\DADOS\\AC\\AC\\Amostra_Pessoas_12.txt", widths = c(2))
head(ac)
##   V1
## 1 12
## 2 12
## 3 12
## 4 12
## 5 12
## 6 12

Acima criamos um data.frame com um campo de tamanho dois (dois caracteres). Passaremos para utilizar 3 campos. Vamos, também, trocar os nomes das variáveis.

ac<-read.fwf("C:\\Users\\letho\\OneDrive\\PROJETO PROFESSOR\\UFJF\\NUDES\\TREINAMENTO R\\PRIMEIRO DIA\\DADOS\\AC\\AC\\Amostra_Pessoas_12.txt", widths = c(2,5,13,8),col.names = c("V0001","V0002","V0011","V0300"))
head(ac)
##   V0001 V0002        V0011 V0300
## 1    12    13 1.200013e+12 20683
## 2    12    13 1.200013e+12 20693
## 3    12    13 1.200013e+12 20693
## 4    12    13 1.200013e+12 44285
## 5    12    13 1.200013e+12 44285
## 6    12    13 1.200013e+12 44285

Se quisermos ler o arquivo, mas saltando o campo de município, devemos indicar o tamanho com sinal negativo.

ac<-read.fwf("C:\\Users\\letho\\OneDrive\\PROJETO PROFESSOR\\UFJF\\NUDES\\TREINAMENTO R\\PRIMEIRO DIA\\DADOS\\AC\\AC\\Amostra_Pessoas_12.txt", widths = c(2,-5,13,8),col.names = c("V0001","V0011","V0300"))
head(ac)
##   V0001        V0011 V0300
## 1    12 1.200013e+12 20683
## 2    12 1.200013e+12 20693
## 3    12 1.200013e+12 20693
## 4    12 1.200013e+12 44285
## 5    12 1.200013e+12 44285
## 6    12 1.200013e+12 44285

Para facilitar, vamos abrir todo o arquivo, utilizando a documentação

ac<-read.fwf("C:\\Users\\letho\\OneDrive\\PROJETO PROFESSOR\\UFJF\\NUDES\\TREINAMENTO R\\PRIMEIRO DIA\\DADOS\\AC\\AC\\Amostra_Pessoas_12.txt",
             widths = c(2,5,13,8,16,1,2,3,2,1,2,2,1,3,3,2,1,1,1,1,1,1,1,1,1,1,4,1,7,7,3,3,1,7,7,7,1,7,7,7,1,1,2,2,1,1,2,1,1,1,
                        3,3,3,1,7,7,7,1,2,1,1,1,1,1,1,1,4,5,1,1,1,1,6,6,6,1,6,9,7,9,7,9,7,10,8,9,3,1,1,1,1,1,1,6,1,7,7,7,1,1,
                        1,2,2,2,1,2,2,2,1,3,1,1,1,2,4,1,2,2,2,2,1,2,1,1,1,1,1,3,1,2,2,2,8,9,4,5,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,
                        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
                        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),
             col.names = c("V0001","V0002","V0011","V0300","V0010","V1001","V1002","V1003","V1004","V1006","V0502","V0504",
                           "V0601","V6033","V6036","V6037","V6040","V0606","V0613","V0614","V0615","V0616","V0617","V0618",
                           "V0619","V0620","V0621","V0622","V6222","V6224","V0623","V0624","V0625","V6252","V6254","V6256",
                           "V0626","V6262","V6264","V6266","V0627","V0628","V0629","V0630","V0631","V0632","V0633","V0634",
                           "V0635","V6400","V6352","V6354","V6356","V0636","V6362","V6364","V6366","V0637","V0638","V0639",
                           "V0640","V0641","V0642","V0643","V0644","V0645","V6461","V6471","V0648","V0649","V0650","V0651",
                           "V6511","V6513","V6514","V0652","V6521","V6524","V6525","V6526","V6527","V6528","V6529","V6530",
                           "V6531","V6532","V0653","V0654","V0655","V0656","V0657","V0658","V0659","V6591","V0660","V6602",
                           "V6604","V6606","V0661","V0662","V0663","V6631","V6632","V6633","V0664","V6641","V6642","V6643",
                           "V0665","V6660","V6664","V0667","V0668","V6681","V6682","V0669","V6691","V6692","V6693","V6800",
                           "V0670","V0671","V6900","V6910","V6920","V6930","V6940","V6121","V0604","V0605","V5020","V5060",
                           "V5070","V5080","V6462","V6472","V5110","V5120","V5030","V5040","V5090","V5100","V5130","M0502",
                           "M0601","M6033","M0606","M0613","M0614","M0615","M0616","M0617","M0618","M0619","M0620","M0621",
                           "M0622","M6222","M6224","M0623","M0624","M0625","M6252","M6254","M6256","M0626","M6262","M6264",
                           "M6266","M0627","M0628","M0629","M0630","M0631","M0632","M0633","M0634","M0635","M6352","M6354",
                           "M6356","M0636","M6362","M6364","M6366","M0637","M0638","M0639","M0640","M0641","M0642","M0643",
                           "M0644","M0645","M6461","M6471","M0648","M0649","M0650","M0651","M6511","M0652","M6521","M0653",
                           "M0654","M0655","M0656","M0657","M0658","M0659","M6591","M0660","M6602","M6604","M6606","M0661",
                           "M0662","M0663","M6631","M6632","M6633","M0664","M6641","M6642","M6643","M0665","M6660","M0667",
                           "M0668","M6681","M6682","M0669","M6691","M6692","M6693","M0670","M0671","M6800","M6121","M0604",
                           "M0605","M6462","M6472","V1005"))
ac$V0010<-ac$V0010/10000000000000

tabulação

A partir dos dados disponíveis, podemos fazer algumas leituras rápidas. Vejamos aqui dois comandos fáceis de usar.

table()

O comando table() oferece a frequência de registros segundo as categorias indicadas. Por exemplo, pode ser do nosso interesse ver quantos homens e quantas mulheres existem no banco de dados.

table(ac$V0601) # variável sexo. Vide documentação
## 
##     1     2 
## 47511 46164

Por outro lado, podemos ter o interesse de avaliar duas dimenões, como sexo e situação de domicílio (rural ou urbano).

table(ac$V0601,ac$V1006)
##    
##         1     2
##   1 30888 16623
##   2 32048 14116

Se adicionarmos mais uma dimensão, o R irá fazer um split da tabela.

xtabs()

Contudo, sabemos que os microdados disponíveis do censo demográfico são uma amostra e, por isso, deve ser ponderada para corresponder a população total. A variável peso não consegue ser incluida no comando table() e, por isso, utilizaremos o comando xtabs().

#Sem pesos
xtabs(~ ac$V0601 + ac$V1006) # veja que a sintaxe muda, com o sinal de "+" como o separador de argumentos ou dimensões. 
##         ac$V1006
## ac$V0601     1     2
##        1 30888 16623
##        2 32048 14116
#Com pesos
xtabs(ac$V0010 ~ ac$V0601 + ac$V1006) # veja que a sintaxe muda, com o sinal de "+" como o separador de argumentos ou dimensões. 
##         ac$V1006
## ac$V0601      1      2
##        1 259387 108937
##        2 272892  92343

A diferença entre os valores é que a primeira tabela cruzada são dados somente da amostra, ao passo que a segunda extrapola os valores para o tamanho do universo (população).

Atividade

A variável “controle” presente do censo é ID de domicílio. Sabendo disso,seria possivel descobrir quantas pessoas (na população do Acre) vivem em cada tipo de espécie de domícilio?