Tipos de dados em R e sua importância em uma linguagem de programação!

Aprenda sobre os tipos de dados e sua importância em uma linguagem de programação. Mais especificamente, aprenda a usar vários tipos de dados como vetor, matrizes, listas e quadros de dados na linguagem de programação R.

Antes de começarmos a introdução e aprendermos sobre vários tipos de dados no R, vamos configurar rapidamente o ambiente R no Terminal e no Jupyter Notebook (O Jupyter Notebook é um aplicativo da web de código aberto que permite criar e compartilhar documentos que contêm código ativo, equações, visualizações e texto narrativo).

O comando a seguir é para o sistema operacional Mac, que instalará o R no seu terminal.

brew install r --build-from-source

Para verificar se a instalação foi bem-sucedida, basta digitar R (maiúsculo) no terminal e você entrará em uma sessão R, como mostrado abaixo.

tipos de dados em R - Instalação

Agora vamos adicionar a linguagem de programação R como um kernel no jupyter notebook. Não esqueça de verificar se o mesmo já está instalado no seu sistema.

Vá para o seu terminal e abra a sessão R e digite os dois comandos abaixo, que adicionarão o kernel R ao seu jupyter notebook.

install.packages('IRkernel')
IRkernel::installspec()

Logo que ambos os comandos listados acima derem bem-sucedidos, execute o jupyter a partir do terminal e abra um notebook com o kernel R, como mostrado abaixo:

tipos de dados em R - Instalação em jupyter notebook

Agora você está pronto para escrever seu primeiro código R no jupyter notebook.

Tipos de dados em R – Introdução

Para usar o R ​​ao máximo, é muito importante conhecer e entender vários tipos de dados e estruturas de dados que existem no R e como eles funcionam. Eles desempenham um papel fundamental em quase todos os problemas e, especialmente, quando você está trabalhando em problemas de aprendizado de máquina, que geralmente são bastante centrados em dados.

Em uma linguagem de programação, geralmente precisamos de variáveis ​​para armazenar informações, que podem ser um número inteiro, caractere, ponto flutuante, booleano etc. A variável type é baseada exclusivamente no tipo de informação que ela contém. Se for atribuído um número inteiro, a variável terá um tipo de dados como int

Variáveis ​​são meramente locais de memória reservados nos quais os valores são armazenados. Assim que você cria uma variável, algum espaço de memória é reservado para ela.

Com base no tipo de dados de uma variável, alguma memória será alocada pelo sistema operacional. Por exemplo, na programação R, uma variável que contém um número inteiro reservará uma memória de 4 bytes e 1 byte para um caractere.

Linguagens de programação como C, C ++ e Java, variáveis ​​são declaradas como tipo de dados; no entanto, em Python e R, as variáveis ​​são um objeto. Os objetos nada mais são do que uma estrutura de dados com poucos atributos e métodos que são aplicados a seus atributos.

Existem vários tipos de objetos R ou estruturas de dados que serão discutidos neste tutorial, como:

  • Listas;
  • Vetores;
  • Matrizes;
  • DataFrame.

Vamos primeiro entender alguns dos tipos de dados básicos nos quais os objetos R são criados como Numérico, Inteiro, Caractere, Fator e Lógico.

  • Numérico: números que têm um valor decimal ou são uma fração na natureza têm um tipo de dados como numérico.
num <- 1.2
print(num)
[1] 1.2

Você pode verificar o tipo de dados ausando a palavra-chave class().

class(num)
'numeric'

Inteiro: números que não contêm valores decimais têm um tipo de dados como um inteiro. No entanto, para criar um tipo de dados inteiro, você usa as.integer()e passa explicitamente a variável como argumento.

int <- as.integer(2.2)
print(int)

[1] 2

class(int)
'integer'

Caractere: como o nome sugere, pode ser uma letra ou uma combinação de letras entre aspas, é considerada como um tipo de dados de caractere por R. Pode ser alfabetos ou números.

char <- "datacamp"
print(char)
[1] "datacamp"
class(char)
'character'
char <- "12345"
print(char)
[1] "12345"
class(char)
'character'

Lógica: Uma variável que pode ter um valor True e False como um booleano chamamos de uma variável lógica.

log_true <- TRUE
print(log_true)
[1] TRUE
class(log_true)
'logical'
log_false <- FALSE
print(log_false)
[1] FALSE
class(log_false)
'logical'
  • Fator: Eles são um tipo de dados usados para se referir a um relacionamento qualitativo, como cores, bom e ruim, classificações de cursos ou filmes, etc. Eles são úteis na modelagem estatística.

Para conseguir isso, você utilizará a função c(), que retorna um vetor (unidimensional) combinando todos os elementos.

fac <- factor(c("good", "bad", "ugly","good", "bad", "ugly"))
print(fac)
[1] good bad  ugly good bad  ugly
Levels: bad good ugly
class(fac)
'factor'

O fator fac tem três níveis que variam de bom, ruim e feio, que podem ser verificados usando a palavra-chave levels, e o tipo de nível será um caractere.

levels(fac)
  1. ‘mau’
  2. ‘Boa’
  3. ‘feio’
nlevels(fac)
3
class(levels(fac))
'character'

Antes de avançar, vamos entender algumas dicas importantes que podem ser úteis!

  • Lembre-se sempre de que a linguagem de programação R faz distinção entre maiúsculas e minúsculas. Todos os objetos definidos acima devem ser usados ​​da mesma maneira, superior ou inferior, conforme mostrado no exemplo abaixo.
Num
Error in eval(expr, envir, enclos): object 'Num' not found
Traceback:

No R, você pode verificar todas as variáveis ​​ou objetos que foram definidos por você no ambiente de trabalho usando a palavra-chave ls(), como mostrado abaixo.

ls()
  1. ‘Caracteres’
  2. ‘int’
  3. ‘num’

Listas

tipos de dados em R - lista

Ao contrário dos vetores, uma lista pode conter elementos de vários tipos de dados e geralmente é conhecida como uma coleção ordenada de valores. Pode conter vetores, funções, matrizes e até outra lista dentro dela (lista aninhada).

As listas em R são um índice, ou seja, o índice começa com um.

Vamos entender o conceito de listas com um exemplo rápido que terá três tipos diferentes de tipos de dados armazenados em uma lista.

lis1 <- 1:5  # Integer Vector
lis1
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
lis2 <- factor(1:5)  # Factor Vector
lis2
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

Níveis:

  1. ‘1’
  2. ‘2’
  3. ‘3’
  4. ‘4’
  5. ‘5’
lis3 <- letters[1:5]  # Character Vector
lis3
  1. ‘a’
  2. ‘b’
  3. ‘c’
  4. ‘d’
  5. ‘e’
combined_list <- list(lis1, lis2, lis3)
combined_list
  1. 1. 1
    2. 2
    3. 3
    4. 4
    5. 5

2. 1. 1
2. 2
3. 3
4. 4
5. 5

Níveis:

  1. ‘1’
  2. ‘2’
  3. ‘3’
  4. ‘4’
  5. ‘5’
  1. ‘a’
  2. ‘b’
  3. ‘c’
  4. ‘d’
  5. ‘e’

Vamos acessar cada vetor na lista separadamente. Para conseguir isso, você utilizará double square brackets uma vez que os três vetores são colocados em um nível dentro da lista. python combined_list[[1]]

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

python combined_list[[2]]

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

Níveis :

  1. ‘1’
  2. ‘2’
  3. ‘3’
  4. ‘4’
  5. ‘5’
combined_list[[3]]
  1. ‘a’
  2. ‘b’
  3. ‘c’
  4. ‘d’
  5. ‘e’

Agora, vamos tentar acessar o quinto elemento a partir do terceiro vetor, que indica a letra e.

combined_list[[3]][5]
'e'

Finalmente, vamos tentar achatar a lista. Uma coisa importante a lembrar é que, como combined_list é uma combinação de tipos de dados characternumeric, o character terá precedência e o tipo de dados da lista completa se tornará o character.

flat_list <- unlist(combined_list)
class(flat_list)
'character'
flat_list
  1. ‘1’
  2. ‘2’
  3. ‘3’
  4. ‘4’
  5. ‘5’
  6. ‘1’
  7. ‘2’
  8. ‘3’
  9. ‘4’
  10. ‘5’
  11. ‘a’
  12. ‘b’
  13. ‘c’
  14. ‘d’
  15. ‘e’
length(flat_list)
15

Vetores

Vetores

Vetores são um objeto usado para armazenar várias informações ou valores do mesmo tipo de dados. Um vetor não pode ter uma combinação de número inteiro e caractere. Por exemplo, se você deseja armazenar os dados totais de 50 clientes, em vez de criar 50 variáveis ​​diferentes para cada um, basta criar um vetor de comprimento 50, que vai armazenar assim todas os dados dos clientes.

Um vetor pode ser criado com uma função c(), que combinará todos os elementos e retornará uma matriz unidimensional.

Como exemplo, vamos criar um vetor marks com dados de cinco alunos da turma numeric.

marks <- c(88,65,90,40,65)
class(marks)
'numeric'

Vamos verificar o comprimento do vetor, que deve retornar o número de elementos contidos nele.

length(marks)
5

Agora, vamos tentar acessar um elemento específico por seu índice.

marks[4]
40
marks[5]
65
marks[6] #retorna NA, pois não há sexto elemento no vetor

<NA>

  • Fatiamento: Semelhante ao Python, o conceito de fatiamento também pode ser aplicado em R.

Vamos tentar acessar elementos do segundo ao quinto usando o fatiamento.

marks[2:5]
  1. 65
  2. 90
  3. 40.
  4. 65

Vamos agora criar um vetor character semelhante à criação de um caractere numérico.

char_vector <- c("a", "b", "c")
print(char_vector)
[1] "a" "b" "c"
class(char_vector)

‘personagem’

length(char_vector)
3
char_vector[1:3]

‘a’
‘b’
‘c’
Se criarmos um vetor que possui valores numéricos e de caracteres, os valores numéricos serão convertidos em um tipo de dados de caracteres.

char_num_vec <- c(1,2, "a")
char_num_vec
  1. ‘1’
  2. ‘2’
  3. ‘a’
class(char_num_vec)
'character'

Vamos criar um vetor com 1024 valores numéricos com a ajuda de um conceito de fatia.

vec <- c(1:1024)

Agora, tente acessar o meio e o último elemento. Para fazer isso, você usará a função length

vec[length(vec)]
1024
vec[length(vec)/2]
512
  • Como fazer para criar um vetor contendo números ímpares?

Basta simplesmente utilizar a função seq, que aceita três parâmetros: início, fim e tamanho da etapa.

seq(1,10, by = 2)
  1. 1
  2. 3
  3. 5
  4. 7
  5. 9

Matrizes

Matriz

Semelhante a um vetor, uma matriz é usada para armazenar informações sobre o mesmo tipo de dados. No entanto, diferentemente dos vetores, as matrizes são capazes de conter informações bidimensionais dentro dela.

Basicamente uma matriz é definida pela sintaxe:

M <- matrix(vector, nrow=r, ncol=c, byrow=FALSE, dimnames=list(char_vector_rownames, char_vector_colnames))

byrow=TRUE indica que é necessário preencher a matriz por linhas. byrow=FALSE neste indica que é necesário preencher a matriz por colunas (o padrão).

Vamos definir rapidamente uma matriz M de forma 2 x 3

M = matrix( c('AI','ML','DL','Tensorflow','Pytorch','Keras'), nrow = 2, ncol = 3, byrow = TRUE)
print(M)
     [,1]         [,2]      [,3]   
[1,] "AI"         "ML"      "DL"   
[2,] "Tensorflow" "Pytorch" "Keras"

Agora iremos utilizar o conceito de fatiamento para e buscar os elementos de uma coluna e coluna.

M[1:2,1:2] #a primeira dimensão seleciona as duas linhas enquanto a segunda dimensão seleciona
#elementos da 1ª e 2ª coluna

A matrix: 2 × 2 do tipo chr

AIML
TensorflowPytorch

DataFrame

Ao contrário de uma matriz, os DataFrames de dados são uma forma mais generalizada de uma matriz. Ele contém dados de forma tabular. Os dados no DataFrame podem ser espalhados por várias colunas, tendo diferentes tipos de dados. A primeira coluna pode ser um caractere, enquanto a segunda coluna pode ser um número inteiro e a terceira coluna pode ser lógica.

As variáveis ​​ou recursos estão no estilo colunar, também conhecido como header, enquanto as observações estão em linhas com o primeiro elemento sendo o nome da linha seguido pelos dados reais, também conhecidos como data rows.

O DataFrame pode ser criado usando a função data.frame()

O DataFrame tem sido amplamente utilizado especialmente em arquivos de textos (arquivos CSV), que são separados por vírgula. Seu uso não se limita apenas à leitura dos dados, mas você também pode usá-los para problemas de aprendizado de máquina, especialmente ao lidar com dados numéricos. 

Os DataFrames podem ser úteis para entender os dados, organizar os dados, plotar e visualizar. Vamos criar um conjunto de dados fictício e aprender algumas funções específicas do DataFrame.

dataset <- data.frame(
   Pessoa = c("Aldo", "Aline","Alan"),
   Idade = c(26, 26, 27),
   Peso  = c(81,85, 90),
   Altura = c(6,5.8,6.2),
   Salario = c(50000, 80000, 100000)
)
print(dataset)
  Pessoa Idade  Peso Altura Salario
1 Aldo    26     81    6.0  5e+04
2 Aline   26     85    5.8  8e+04
3 Alan    27     90    6.2  1e+05
class(dataset)
'data.frame'
nrow(dataset) #isso fornecerá o número de linhas existentes no conjunto de dados DataFrame
3
ncol(dataset) #isso fornecerá o número de colunas existentes no conjunto de dados DataFrame
5
df1 = rbind(dataset, dataset) #uma ligação de linha que acrescentará os argumentos na forma de linha.

Um Data.Frame: 6 × 5

PessoaIdadePesoAlturaSalário
<fct><dbl><dbl><dbl><dbl>
Aldo26816.05e + 04
Aline26855,88e + 04
Alan27906.21e + 05
Aldo26816.05e + 04
Aline26855,88e + 04
Alan27906.21e + 05
df2 = cbind(dataset, dataset) #uma ligação de coluna que acrescentará os argumentos na forma de coluna.
df2

Um Data.Frame: 3 × 10

PessoaIdadePesoAlturaSalárioPessoaIdadePesoAlturaSalário
<fct><dbl><dbl><dbl><dbl><fct><dbl><dbl><dbl><dbl>
Aldo26816.05e + 04Aldo26816.05e + 04
Aline26855,88e + 04Aline26855,88e + 04
Alan27906.21e + 05Alan27906.21e + 05

Vejamos o head tail

head(df1,3) #aqui apenas três linhas serão impressas

Um Data.Frame: 3 x 5

PessoaIdadePesoAlturaSalário
<fct><dbl><dbl><dbl> <dbl>
1Aldo26816.0 5e + 04
2Aline26855,8 8e + 04
3Alan27906.2 1e + 05
str(dataset) #isso retorna as informações individuais de classe ou tipo de dados para cada coluna.
'data.frame':    3 obs. of  5 variables:
 $ Pessoa: Factor w/ 3 levels "Aldo","Aline",..: 1 3 2
 $ Idade   : num  26 26 27
 $ Peso: num  81 85 90
 $ Altura: num  6 5.8 6.2
 $ Salario: num  5e+04 8e+04 1e+05

Agora, vejamos a função summary(), que é útil quando você deseja entender as estatísticas do seu conjunto de dados. Como mostrado abaixo, ele divide seus dados em três, com base nos quais você pode obter alguma intuição sobre a distribuição dos seus dados. Também mostra se existem valores ausentes no seu conjunto de dados.

summary(dataset)
 Pessoa       Idade            Peso          Altura         Salario      
 Aldo:1   Min.   :26.00   Min.   :81.00   Min.   :5.8   Min.   : 50000  
 Aline:1  1st Qu.:26.00   1st Qu.:83.00   1st Qu.:5.9   1st Qu.: 65000  
 Alan:1   Median :26.00   Median :85.00   Median :6.0   Median : 80000  
          Mean   :26.33   Mean   :85.33   Mean   :6.0   Mean   : 76667  
          3rd Qu.:26.50   3rd Qu.:87.50   3rd Qu.:6.1   3rd Qu.: 90000  
          Max.   :27.00   Max.   :90.00   Max.   :6.2   Max.   :100000 

Conclusão

Este foi um bom ponto de partida para iniciantes que estão curiosos para aprender mais sobre a linguagem de programação R. Sinta-se à vontade para verificar mais funções auxiliares relacionadas a cada tipo de dados e não deixe de conferir as atualizações em nosso site.

Até a próxima!

Compartilhe

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on whatsapp
WhatsApp
Share on print
imprimir
Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on print

O que achou deste artigo?

Leia também