J'essaye de séparer plusieurs variables qualitatives dans un dataframe.
Jusque là rien de compliqué : separate () avec un séparateur "|"
Sauf que mon dataframe ressemble à quelque chose comme cela :
Code : Tout sélectionner
print (dftest)
User.ID VAR1 VAR2 VAR3 VAR4 (...)
ID1 OUI 2009 Autre: 5 | Soutien: 32 | Direction: 5 Form: 0.8 | Dev: 0.9 | RD: 0.4 | Invest: 1 | TI: 0.3 (...)
ID2 NON 2007 Soutien: 20 | Direction: 6 Form: 0.8 | Dev: 0.9 | Invest: 1 | TI: 0.7 (...)
ID3 OUI 2018 Autre: 10 | Direction: 4 Dev: 1.0 | Invest: 1.2 | TI: 0.5 (...)
Pour le moment j'applique le code suivant :
Code : Tout sélectionner
library(tidyverse)
dftest3<- reduce(seq_along(dftest),
.init = dftest,
~ .x %>% separate(names(dftest)[.y],
sep = '\\|',
into = paste0(names(dftest)[.y], '_' , seq(1 + max(str_count(dftest[[.y]], '\\|'), na.rm=TRUE))),
fill = 'right'
)
)
Le résultat est :
Code : Tout sélectionner
print (dftest3)
User.ID_1 VAR1-1 VAR2_1 VAR3_1 VAR3_2 VAR3_3 VAR4_1 VAR4_2 VAR4_3 VAR4_4 VAR4_5
ID1 OUI 2009 Autre: 5 Soutien: 32 Direction: 5 Form: 0.8 Dev: 0.9 RD: 0.4 Invest: 1 TI: 0.3
ID2 NON 2007 Soutien: 20 Direction: 6 Form: 0.8 Dev: 0.9 Invest: 1 TI: 0.7
ID3 OUI 2018 Autre: 10 Direction: 4 Dev: 1.0 Invest: 1.2 TI: 0.5
Il me reste deux problèmes :
- Les cellules contiennent un intitulé de "sous-variable"
- Chaque ligne n'a pas le même nombre de modalités sur les variables à séparer ce qui entraine des mélanges.
J'essaye en fait d'obtenir le tableau suivant :
Code : Tout sélectionner
print (dftest3)
User.ID VAR1 VAR2 VAR3_Autre VAR3_Soutien VAR3_Direction VAR4_Form VAR4_Dev VAR4_RD VAR4_Invest VAR4_TI
ID1 OUI 2009 5 32 5 0.8 0.9 0.4 1 0.3
ID2 NON 2007 20 6 0.8 0.9 1 0.7
ID3 OUI 2018 10 4 1.0 1.2 0.5
J'ai beaucoup plus de difficultés à voir comment procéder ici.
Est-ce que quelqu'un aurait une solution adaptée à cette situation ?
Merci beaucoup :-).