0

How can I keep the parenthesis in from Q11 in the data below? This column is from a Google forms in which people could choose as many Brazilian regions as they wished, now I have to slipt the region. Google separates the answers with commas, so every region is separed by ), . How can I slipt the rows using ), as a separator but keep the open ) ?

  • Code:
df %>% select(Q1,Q11) %>% 
  pivot_longer(c(Q11)) %>%
  separate_rows(value, sep = "\\),") %>%   ### NOT WORKING
  # group_by(Q2, ID) %>%
  mutate(row = row_number()) %>%
  pivot_wider() %>%
  select(-row) %>% 
  mutate(Q11 = str_trim(Q11, side = c("both"))
  ) 
       
  • Desired output: one row per Brazilian region, like in the original Forms:

Data in the Forms looks like this:

## Sul (Rio Grande do Sul, Santa Catarina, Paraná), Sudeste (Espírito Santo, Minas Gerais, Rio de Janeiro e São Paulo), Nordeste (Alagoas, Bahia, Ceará, Maranhão, Piauí, Pernambuco, Paraíba, Rio Grande do Norte e Sergipe)
## Nordeste (Alagoas, Bahia, Ceará, Maranhão, Piauí, Pernambuco, Paraíba, Rio Grande do Norte e Sergipe)
## Sudeste (Espírito Santo, Minas Gerais, Rio de Janeiro e São Paulo)
## Centro-Oeste (Goiás, Mato Grosso, Mato Grosso do Sul e o Distrito Federal)
## Norte (Acre, Amazonas, Amapá, Pará, Rondônia, Roraima e Tocantins)

These links were a bit helpful: 1 , 2 , but I couldn't get my head around it! thanks in advance.

  • data:
structure(list(Q11 = structure(c(6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 3L, 6L, 6L, 2L, 6L, 4L, 5L, 3L, 6L, 1L, 6L, 
6L, 7L), .Label = c("Sudeste (Espírito Santo, Minas Gerais, Rio de Janeiro e São Paulo), Centro-Oeste (Goiás, Mato Grosso, Mato Grosso do Sul e o Distrito Federal)", 
"Sudeste (Espírito Santo, Minas Gerais, Rio de Janeiro e São Paulo), Centro-Oeste (Goiás, Mato Grosso, Mato Grosso do Sul e o Distrito Federal), Nordeste (Alagoas, Bahia, Ceará, Maranhão, Piauí, Pernambuco, Paraíba, Rio Grande do Norte e Sergipe)", 
"Sudeste (Espírito Santo, Minas Gerais, Rio de Janeiro e São Paulo), Nordeste (Alagoas, Bahia, Ceará, Maranhão, Piauí, Pernambuco, Paraíba, Rio Grande do Norte e Sergipe)", 
"Sul (Rio Grande do Sul, Santa Catarina, Paraná), Sudeste (Espírito Santo, Minas Gerais, Rio de Janeiro e São Paulo)", 
"Sul (Rio Grande do Sul, Santa Catarina, Paraná), Sudeste (Espírito Santo, Minas Gerais, Rio de Janeiro e São Paulo), Centro-Oeste (Goiás, Mato Grosso, Mato Grosso do Sul e o Distrito Federal), Nordeste (Alagoas, Bahia, Ceará, Maranhão, Piauí, Pernambuco, Paraíba, Rio Grande do Norte e Sergipe)", 
"Sul (Rio Grande do Sul, Santa Catarina, Paraná), Sudeste (Espírito Santo, Minas Gerais, Rio de Janeiro e São Paulo), Centro-Oeste (Goiás, Mato Grosso, Mato Grosso do Sul e o Distrito Federal), Norte (Acre, Amazonas, Amapá, Pará, Rondônia, Roraima e Tocantins), Nordeste (Alagoas, Bahia, Ceará, Maranhão, Piauí, Pernambuco, Paraíba, Rio Grande do Norte e Sergipe)", 
"Sul (Rio Grande do Sul, Santa Catarina, Paraná), Sudeste (Espírito Santo, Minas Gerais, Rio de Janeiro e São Paulo), Nordeste (Alagoas, Bahia, Ceará, Maranhão, Piauí, Pernambuco, Paraíba, Rio Grande do Norte e Sergipe)"
), class = "factor")), row.names = c(NA, -25L), class = "data.frame")
Larissa Cury
  • 806
  • 2
  • 11

1 Answers1

0

use a look-behind regex:. ie separate on a comma which is preceeded by a closing paranthesis: (?<=\\)),

df%>%
  separate_rows(sep='(?<=\\)),')
Onyambu
  • 67,392
  • 3
  • 24
  • 53
  • perfect!! thanks! Can you please walk me through it? I tried a lot, but I couldn't get the right regex! – Larissa Cury Jul 02 '23 at 17:27
  • @LarissaCury i believe the explanation captures all thatyou need.ie separate on a comma that is preceeded by a paranthesis ie `(?<=[)]),` – Onyambu Jul 02 '23 at 17:31