Pivot data from wide to long

Boa noite a todos,

hoje tive que usar o recurso de converte uma tabela do formato wide to long,
usei o exemplo disponível no link:
https://tidyr.tidyverse.org/reference/pivot_longer.html

Ajustei o código abaixo:

anscombe %>%
pivot_longer(everything(),
names_to = c(".value", “set”),
names_pattern = “(.)(.)”
)

Para minha situação, e ficou assim:

baias %>%
pivot_longer(cols = starts_with(“cv”),
names_to = c(".value", “set”),
names_pattern = “(.)(.)”
)

Funcionou muito bem, mas essa parte do código abaixo:

c(".value",

e

names_pattern = “(.)(.)”

“eu não entendi o que significa, alguém poderia me explicar?”

muito obrigado!

Alessander,

Acho que a resposta para a sua pergunta está na própria documentação da pivot_longer(), que você pode acessar rodando o comando ?pivot_longer.

Observe a descrição dos parâmetros em questão:

  • names_to: A string specifying the name of the column to create from the data stored in the column names of data. Can be a character vector, creating multiple columns, if names_sep or names_pattern is provided. In this case, there are two special values you can take advantage of:

    • NA will discard that component of the name.

    • .value indicates that component of the name defines the name of the column containing the cell values, overriding values_to.

  • names_pattern: […] names_pattern takes the same specification as extract(), a regular expression containing matching groups (()).

No exemplo que você copiou, names_pattern vai procurar dois caracteres seguidos no nome das colunas sendo pivotadas (o ponto final é regex para “1 caractere qualquer”). O primeiro caractere vai indicar o nome da coluna para a qual aqueles valores vão (por causa do .value) e o segundo vai indicar o valor da coluna set naquela linha.

Sendo assim, a tabela anscombe tem as colunas

#> x1 x2 x3 x4 y1 y2 y3 y4

e vai passar a ter

#> set x y

com set assumindo os valores 1, 2, 3 e 4.

1 curtida

Caio, muito obrigado pela resposta.
Creio que a minha dificuldade veio de não entender que o ponto final significava a regex para “1 caractere qualquer”

Atenciosamente