Tenho uma tabela confusa que leio em um quadro de dados semelhante ao seguinte simplificado, que desejo analisar.
mydf <- data.frame(group=LETTERS[1:5], code=101:105, ids=c('g1:id1,id2,id3\ng2:id4,id5',
'id6,id7,id8,id9',
'g1:id10,id11\ng3:id12',
'g2:id13,id14',
'id15'))
Parece que:
> mydf
group code ids
1 A 101 g1:id1,id2,id3\ng2:id4,id5
2 B 102 id6,id7,id8,id9
3 C 103 g1:id10,id11\ng3:id12
4 D 104 g2:id13,id14
5 E 105 id15
Preciso separar a ids
coluna recolhida em várias linhas para obter um quadro de dados final em formato longo.
Para isso, eu normalmente aplicaria separate_rows
from tidyr
, mas esse caso tem um problema adicional: alguns dos recolhidos ids
estão agrupados em subgrupos.
Acho que devo primeiro separar esses subgrupos em colunas de ids diferentes e depois aplicar separate_rows
ou separate_longer_delim
nessas colunas... Não sei como fazer isso.
O quadro de dados final que espero seria assim, em formato longo, com as subgroup
informações em uma coluna adicional:
> mydf_new
group code id subgroup
1 A 101 id1 g1
2 A 101 id2 g1
3 A 101 id3 g1
4 A 101 id4 g2
5 A 101 id5 g2
6 B 102 id6 <NA>
7 B 102 id7 <NA>
8 B 102 id8 <NA>
9 B 102 id9 <NA>
10 C 103 id10 g1
11 C 103 id11 g1
12 C 103 id12 g3
13 D 104 id13 g2
14 D 104 id14 g2
15 E 105 id15 <NA>
Uma maneira é separar mais largo/longo em algumas etapas:
Isso pode incluir alguns ajustes que você pode usar para desenvolver uma versão R básica mais consistente, se desejar:
dando