# R melt: Como reestruturar data frames

A conversão de data frames com a função `melt()`, na linguagem de programação R, facilita sua adaptação para que atenda a diferentes requisitos. Muitos métodos de análise, como **modelos lineares e de variância (ANOVA)**, favorecem dados em formato *long*, pois eles são mais naturais e fáceis de interpretar.

## Para que serve a função R melt()?

A função R `melt()` faz parte do pacote `reshape2`. Ela é usada para **reestruturar data frames**, especialmente em sua conversão do formato *wide* para long. No formato *wide*, as variáveis são organizadas em colunas separadas, enquanto o formato *long* oferece uma melhor exibição para a realização de análises e visualizações.

A função R `melt()` é uma ferramenta essencial para transformar dados. Ela é especialmente útil quando as informações só estão disponíveis no formato *wide*, mas determinadas análises ou gráficos requerem o uso do formato *long*. Essa opção de reestruturação de dados aumenta a flexibilidade dos data frames e promove o uso otimizado de diversas **ferramentas de análise em R** e bibliotecas de visualização.

## Sintaxe da função R melt()

A função R `melt()` pode ser usada com diferentes argumentos.

```R
melt(data.frame, na.rm = FALSE, value.name = "nome", id.vars = 'columns')
```

- **`data.frame`**: Refere-se ao data frame que você deseja reestruturar.
- **`na.rm`**: Um argumento opcional que tem como valor padrão `FALSE`.
- **`value.name`**: Argumento opcional que possibilita nomear a coluna que contém os valores das variáveis reestruturadas no novo conjunto de dados.
- **`id.vars`**: Argumento opcional que indica quais colunas devem ser mantidas como identificadores. Neste caso, `columns` é usado como placeholder.

Vejamos um exemplo:

```R
df <- data.frame(ID = 1:3, A = c(4, 7, NA), B = c(8, NA, 5))
```

O data frame resultante é o seguinte:

```R
ID    A      B
1  1     4      8
2  2     7  NA
3  3  NA     5
```

Agora, vamos usar a função `melt()` e transformar o data frame em formato *long*:

```R
melted_df <- melt(df, na.rm = FALSE, value.name = "Valor", id.vars = "ID")
```

O data frame reestruturado `melted_df` ficaria assim:

```R
ID  variável  Valor
1  1                A              4
2  2                A              7
3  3                A          NA
4  1                B              8
5  2                B          NA
6  3                B             5
```

O resultado é um data frame que foi reestruturado no formato *long*. A coluna `ID` foi mantida como um identificador, a coluna `variável` contém os antigos nomes das colunas (`A` e `B`) e a coluna `Valor` contém os valores correspondentes. Devido à presença de `na.rm = FALSE`, faltam alguns valores (sinalizados com `NA`).

## Remover entradas NA com a função R melt()

É possível remover os valores faltantes nos data frames usando a opção `na.rm=True`.

Vamos definir um novo data frame:

```R
df <- data.frame(ID = 1:4, A = c(3, 8, NA, 5), B = c(6, NA, 2, 9), C = c(NA, 7, 4, 1))
```

O data frame tem a seguinte forma:

```R
ID    A     B      C
1   1     3     6    NA
2   2     8   NA      7
3   3   NA    2       4
4   4     5     9       1
```

Agora, vamos reestruturar o data frame usando a função `melt()`:

```R
melted_df <- melt(df, na.rm = TRUE, value.name = "Valor", id.vars = "ID")
```

O novo data frame `melted_df` passa a existir em formato *long* sem os valores `NA`:

```R
ID    variável  Valor
1    1            A        3
2    2            A        8
3    4            A        5
4    1            B        6
5    3            B        2
6    4            B        9
7    2           C        7
8    3           C        4
9    4           C        1
```

Dica Se quiser aprender como manipular strings na linguagem R, acesse estes tutoriais sobre as funções [R substring()](https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/r-substring/) e [R paste()](https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/r-paste/) do nosso Digital Guide.


This is a markdown version of: [https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/r-melt/](https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/r-melt/) for AI/LLM consumption.