Transpose column to row with condition in r

Asked

Viewed 146 times

0

I have a file with a column and I would like to transfer it with one condition: the first number that appears and the subsequent lines should be in a row

df <- data.frame(Coluna = c(1, "ALDO SANTOS", "02/02/2020", "MARIA SANTOS", "EM Socorro Bastos", "Pov. Acará Mirim",
                            
                            "EM Socorro Bastos","Pov. Acará Mirim",2,"FABIA SOUSA", "12/10/2020","RAIMUNDA SOUSA",
                            
                            "EM Caio Abreu", "Pov. Bacuri", "EM Gonçalves Dias", "Pov. Morada N. Areias", 3,
                            
                            "FABINA NUNES", "28/01/2020", "LUCIA GOMES", "Colégio Albérico F. Ferreira",
                            
                            "Trindade - Sede"),
                 
                 stringsAsFactors = FALSE)

df

                     Coluna
1                             1
2                   ALDO SANTOS
3                    02/02/2020
4                  MARIA SANTOS
5             EM Socorro Bastos
6              Pov. Acará Mirim
7             EM Socorro Bastos
8              Pov. Acará Mirim
9                             2
10                  FABIA SOUSA
11                   12/10/2020
12               RAIMUNDA SOUSA
13                EM Caio Abreu
14                  Pov. Bacuri
15            EM Gonçalves Dias
16        Pov. Morada N. Areias
17                            3
18                 FABINA NUNES
19                   28/01/2020
20                  LUCIA GOMES
21 Colégio Albérico F. Ferreira
22              Trindade - Sede

I expect a result like this:

Coluna_1	Coluna_2	Coluna_3	Coluna_4	Coluna_5	Coluna_6	Coluna_7	Coluna_8
1	ALDO SANTOS	02/02/20	MARIA SANTOS	EM Socorro Bastos	Pov. Acará Mirim	EM Socorro Bastos	Pov. Acará Mirim
2	FABIA SOUSA	02/08/20	RAIMUNDA SOUSA	EM Caio Abreu	Pov. Bacuri	EM Gonçalves Dias	Pov. Morada N. Areias
3	FABINA NUNES	28/01/20	LUCIA GOMES	Colégio Albérico F. Ferreira	Trindade - Sede		

1 answer

1


Here using the tidyr and dplyr of tidyverse and creating variables to use index.

library(tidyverse)

df_final <- df %>% 
  #Numera os grupos para cada número isolado em df
  mutate(Contagem = cumsum(str_detect(Coluna, '^\\d*$'))
  ) %>% 
  group_by(Contagem) %>% 
  #Cria as colunas de acordo com a ordem nos grupos
  mutate(Ordem = paste0("Coluna_", row_number())) %>%
  #Transformas as linhas em colunas
  pivot_wider(names_from = Ordem, values_from = Coluna) %>% 
  ungroup() %>% 
  #Tira a variável de contagem
  select(-Contagem)

df_final
#> # A tibble: 3 x 8
#>   Coluna_1 Coluna_2  Coluna_3  Coluna_4 Coluna_5 Coluna_6 Coluna_7 Coluna_8
#>   <chr>    <chr>     <chr>     <chr>    <chr>    <chr>    <chr>    <chr>   
#> 1 1        ALDO SAN… 02/02/20… MARIA S… EM Soco… Pov. Ac… EM Soco… Pov. Ac…
#> 2 2        FABIA SO… 12/10/20… RAIMUND… EM Caio… Pov. Ba… EM Gonç… Pov. Mo…
#> 3 3        FABINA N… 28/01/20… LUCIA G… Colégio… Trindad… <NA>     <NA>

Created on 2019-11-07 by the reprex package (v0.3.0)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.