Bonjour, j'ai déjà une solution à mon problème mais j'aimerais savoir si il était possible de l'optimiser.
J'ai une base avec une ligne par contrat, (un client peut avoir plusieurs contrats donc plusieurs lignes), et dans cette base j'ai une variable qui renseigne la branche du contrat (exemple : AUTO, HABITATION, GAV...).
J'aimerais transformer ma base pour passer à une ligne par client, et donc que la variable BRANCHE se transforme en plusieurs variables (exemple : une variable AUTO, une variable HABITATION, une variable GAV) qui renseigne pour chaque client, son nombre de contrats de cette branche.
Je vais mettre un exemple avec des données et mes codes :
cette table s'appelle : Contrat_BRANCHE( et c'est bien entendu un extrait, elle fait un peu + d'1.7 millions de lignes et la variable prend ~15 modalités)
ID_client branche
1 1 HAB
2 1 AUTO
3 2 HAB
4 2 AUTO
5 2 HAB
6 2 GAV
7 3 GAV
Je fais cette ligne de code (qui est longue à l’exécution).
Contrat_DISJONCTIF <- data.frame(Contrat_BRANCHE$ID_client ,model.matrix( ~ branche-1,data = Contrat_BRANCHE))
Voici un extrait des 7 premières lignes et des 6 premières colonnes
Contrat_BRANCHE.ID_client brancheAUTO brancheHAB brancheGAV
1 1 1 0 0
2 1 0 1 0
3 2 0 1 0
4 2 1 0 0
5 2 0 1 0
6 2 0 0 1
7 3 0 0 1
Cette table a toujours me même nombre de lignes et pour chaque ligne que des 0 et une seule colonne avec un 1
Je fais ensuite ce code là : (qui lui est très rapide d’exécution)
Contrat_DISJONCTIF_COMPLET <- Contrat_DISJONCTIF %>%
group_by(Contrat_BRANCHE.ID_client) %>%
summarise(AUTO = sum(brancheAUTO),
AUTRES.AUTO = sum(brancheAUTRES.AUTO),
COLLECTIVITES = sum(brancheCOLLECTIVITES),
CONSTRUCTION = sum(brancheCONSTRUCTION),
DEP = sum(brancheDEP),
ENTREPRISES = sum(brancheENTREPRISES),
FLOTTES = sum(brancheFLOTTES),
GAV = sum(brancheGAV),
CLIMAT = sum(brancheGRELE.CLIMAT),
HAB = sum(brancheHAB),
MRAGRI = sum(brancheMRAGRI),
MRPRO = sum(brancheMRPRO),
PREV = sum(branchePREV),
SANTE = sum(brancheSANTE),
TMA = sum(brancheTMA)
)
Et qui me donne la table souhaitée (Contrat_DISJONCTIF_COMPLET ) : (extrait des 4 premiers clients et de 5 variables sur les 15)
ID_Client AUTO HAB GAV
1 1 1 0
2 1 2 1
3 0 0 1
Merci de votre aide !
(Le problème étant que je fais ce genre de manipulation plusieurs fois dans la création de ma base et que ça n'est pas optimisé)