Curso
Data reshaping em R é organizar linhas e colunas do seu jeito para usar os dados conforme a sua necessidade. Na maioria dos casos, os dados são trabalhados no formato de data frame em R para processamento, usando funções como "rbind()", "cbind()" etc.
Nesse processo, você reorganiza os dados em linhas e colunas. Reshaping é deixar os dados no formato exato de que você precisa para continuar o processamento.
Criando seus dados
Vamos criar um gerador de números aleatórios e montar colunas para concatená-las em um data frame. Também vamos inserir um id para usar depois. "set.seed(123)" é usado para produzir números aleatórios reprodutíveis, ou seja, qualquer pessoa que rodar o código terá a mesma amostra. Serão criadas três variáveis, colm1, colm2, colm3. Com a ajuda de "sample()", são gerados valores de 1 a 15, com possibilidade de repetição. O data frame armazena esses dados em tabela, e o id é adicionado como um número único.
set.seed(123)
N <- 15
colm1 <- sample(1:15, N, replace=TRUE)
colm2 <- sample(1:15, N, replace=TRUE)
colm3 <- sample(1:15, N, replace=TRUE)
df_Temp <- data.frame(colm1, colm2,colm3)
df_Temp$id<-seq(nrow(df_Temp))
df_Temp
O código acima gera a saída a seguir, com três colunas chamadas "colm1", "colm2", "colm3" e um id de 1 a 15. Os valores de cada coluna são preenchidos com números de 1 a 15; alguns se repetem e outros podem nem aparecer.
colm1 colm2 colm3 id
15 11 14 1
15 5 3 2
3 3 4 3
14 11 14 4
3 9 1 5
10 12 11 6
2 9 7 7
6 9 5 8
11 13 12 9
5 3 15 10
4 8 10 11
14 10 13 12
6 7 7 13
9 10 9 14
10 9 9 15
função cbind
Uso: combina vetores, matrizes e data frames por colunas.
Parâmetros: cbind(v1, v2): v1 e v2 podem ser vetores, matrizes ou data frames.
Veja o exemplo de binding na prática.
O id pode ser selecionado por "df_Temp[,4]", enquanto "df_Temp[,2]" seleciona "colm2" de df_Temp, como abaixo. Esses dois servem de parâmetros para "cbind()" e o resultado é armazenado na variável "cbindexample". Em seguida, os nomes das colunas podem ser alterados com "colnames()", que recebe o objeto e um vetor com os novos nomes, por exemplo: "newid", "new_colm2".
cbindexample<-cbind(df_Temp[,4],df_Temp[,2])
colnames(cbindexample)<- c('newid','new_colm2')
cbindexample
O código acima gera a saída abaixo, mostrando que você pode unir as duas colunas id e colm2 usando a função "cbind" para criar um novo data frame. Os nomes das colunas foram alterados para "new_colm2" e "id" virou "newid".
newid new_colm2
1 11
2 5
3 3
4 11
5 9
6 12
7 9
8 9
9 13
10 3
11 8
12 10
13 7
14 10
15 9
função rbind:
Uso: rbind combina vetores, matrizes ou data frames por linhas.
Parâmetros: rbind(v1, v2): v1 e v2 podem ser vetores, matrizes ou data frames.
Vamos criar um novo vetor chamado "new_vector" e combiná-lo com "cbindexample" (de 2 colunas) usando "rbind", concatenando ambos e armazenando em "rbindexample".
new_vector<- c(16,15)
rbindexample<- rbind(cbindexample,new_vector)
rbindexample
O código acima gera a saída abaixo, na qual uma nova linha é adicionada com os valores 16 e 15 em "newid" e "new_colm2", respectivamente.
newid new_colm2
1 11
2 5
3 3
4 11
5 9
6 12
7 9
8 9
9 13
10 3
11 8
12 10
13 7
14 10
15 9
16 15
função melt:
Uso: a função melt converte um objeto para o estado "derretido" (long format), ou seja, pega várias colunas de dados e transforma em uma única coluna.
Parâmetros: melt(data, …, na.rm=FALSE/TRUE, value.name=”value”),
data: o input que você vai "derreter".
...: argumentos passados para/por outras funções.
na.rm: usado para tratar valores ausentes, convertendo ausências explícitas em implícitas.
value.name: nome da coluna onde os valores serão armazenados.
Vamos ver o código para "derreter" os dados usando a variável id, gerando uma coluna com o nome da coluna original e outra com o valor:
Importe o pacote "reshape2" com "library()" e use melt para combinar as colunas colm1, colm2, colm3 de "df_Temp" em um único lugar chamado "variable", mantendo "id" como identificador.
library(reshape2)
molted=melt(df_Temp,id.vars=c("id"))
molted
id variable value
1 colm1 15
2 colm1 15
3 colm1 3
4 colm1 14
5 colm1 3
6 colm1 10
7 colm1 2
8 colm1 6
9 colm1 11
10 colm1 5
11 colm1 4
12 colm1 14
13 colm1 6
14 colm1 9
15 colm1 10
1 colm2 11
2 colm2 5
3 colm2 3
4 colm2 11
5 colm2 9
6 colm2 12
7 colm2 9
8 colm2 9
9 colm2 13
10 colm2 3
11 colm2 8
12 colm2 10
13 colm2 7
14 colm2 10
15 colm2 9
1 colm3 14
2 colm3 3
3 colm3 4
4 colm3 14
5 colm3 1
6 colm3 11
7 colm3 7
8 colm3 5
9 colm3 12
10 colm3 15
11 colm3 10
12 colm3 13
13 colm3 7
14 colm3 9
15 colm3 9
A saída mostra que, ao derreter os dados de colm1, colm2 e colm3 com base na variável id, tudo é combinado em uma coluna chamada "variable", enquanto os valores ficam em "value".
função dcast:
Uso: quando você tem um conjunto de dados derretido (long), pode reconvertê-lo ao formato original (wide) com esta função.
Parâmetros: dcast(data, id_variable~value),
data: dados derretidos que precisam voltar ao formato original.
id_variable: uma ou mais colunas usadas para derreter os dados das outras colunas em uma só.
~: após esse sinal, informamos os valores ou a nova coluna derretida do dataset.
No código abaixo, "reshape2" é importado com "library()" e "dcast()" recebe como primeiro parâmetro os dados resultantes de "melt()" e usa o símbolo "~" com id para formar as novas colunas a partir de "variable".
library(reshape2)
dcast(molted,id~variable)
id colm1 colm2 colm3
1 15 11 14
2 15 5 3
3 3 3 4
4 14 11 14
5 3 9 1
6 10 12 11
7 2 9 7
8 6 9 5
9 11 13 12
10 5 3 15
11 4 8 10
12 14 10 13
13 6 7 7
14 9 10 9
15 10 9 9
Perceba que, após "melt()", os dados voltam ao conjunto original. Há três colunas com seus respectivos valores e o id em uma coluna separada.
função de transposição:
Uso: converte linhas em colunas e colunas em linhas.
Parâmetros: t(data). "data" é o data frame que você quer transpor.
Vamos inverter linhas e colunas usando a função de transposição. Basta usar "t(df_Temp)", como abaixo.
trans <- t(df_Temp)
trans
O código acima gera a seguinte saída:
colm1 15 15 3 14 3 10 2 6 11 5 4 14 6 9 10
colm2 11 5 3 11 9 12 9 9 13 3 8 10 7 10 9
colm3 14 3 4 14 1 11 7 5 12 15 10 13 7 9 9
id 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Veja que o data frame, que tinha 15 linhas e quatro colunas, passa a ter 15 colunas e 3 linhas após a transposição.
Parabéns
Parabéns, você chegou ao fim deste tutorial!
Neste tutorial, você viu diferentes funções do R como "rbind()", "cbind()", além de "Melt()", "Dcast()" e, por fim, a função de transposição.
Se quiser aprender mais sobre R, faça o curso Introduction to R da DataCamp e confira nosso guia R Packages: A Beginner's Tutorial.
Referências:
Funções melt

