Identification des paiements.

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Brice ASSOUAKON
Messages : 5
Enregistré le : 17 Sep 2018, 08:43

Identification des paiements.

Messagepar Brice ASSOUAKON » 25 Sep 2018, 11:36

Bonjour Messieurs,
Je suis nouveau par ici.
toute fois j'ai un problème qui me chiffonne depuis un bon moment. J'aimerais avoir de l'aide ci-possible.
J'ai deux tableaux qui se présentent comme suit.

La base AVANCE

ID Contrat prime Estimation
1 A 100 400
2 A 100 500
3 B 200 600
4 B 200 800
5 C 300 1000
6 C 300 1500

La base PAIEMENT

Contrat prime
A 100
A 100
A 100
A 100
A 100
A 100
B 200
B 200
B 200
B 200
B 200
Mon problème est que je veux ramener la colonne ID au niveau de la base PAIEMENT de sorte que tant que Contrat de PAIEMENT est A et que la somme des prime de PAIEMENT pour CONTRAT=A ne vaut pas Estimation de la ligne 1 de la base AVANCE c'est à dire la première valeur de l'estimation de la base AVANCE pour CONTRAT=A j'affecte à tous les paiement de Contrat=A ID de la ligne 1 de la base avance si le cumule des primes atteint la valeur de l'estimation pour CONTRAT=A j'affecte à la ligne suivante l'ID de la deuxieme ligne de CONTRAT=A de la base AVANCE

Pour être plus précis je ce résultat à la sortie
ID Contrat prime
1 A 100
1 A 100
1 A 100
1 A 100
2 A 100
2 A 100
3 B 200
3 B 200
3 B 200
4 B 200
4 B 200

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Identification des paiements.

Messagepar Pierre-Yves Berrard » 25 Sep 2018, 12:20

Bonjour,

Brice ASSOUAKON a écrit :Mon problème est que je veux ramener la colonne ID au niveau de la base PAIEMENT de sorte que tant que Contrat de PAIEMENT est A et que la somme des prime de PAIEMENT pour CONTRAT=A ne vaut pas Estimation de la ligne 1 de la base AVANCE c'est à dire la première valeur de l'estimation de la base AVANCE pour CONTRAT=A j'affecte à tous les paiement de Contrat=A ID de la ligne 1 de la base avance si le cumule des primes atteint la valeur de l'estimation pour CONTRAT=A j'affecte à la ligne suivante l'ID de la deuxieme ligne de CONTRAT=A de la base AVANCE

Malgré plusieurs tentatives, je n'ai pas réussi à aller jusqu'au bout de cette longue phrase.
PY

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Identification des paiements.

Messagepar Serge Rapenne » 25 Sep 2018, 13:01

Bonjour,

j'ai lu la réponse de Pierre-Yves avant de lire la totalité de la question. Je me suis dit : "Il exagère" mais non. A la 2eme tentative de lecture de cette fameuse phrase, j'ai également renoncé. ;-)

Serge

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Identification des paiements.

Messagepar Pierre-Yves Berrard » 25 Sep 2018, 13:25

Ça me rassure sur mes capacité intellectuelles...

Sinon, le reste est bien présenté, donc on pourra aider après éclaircissement sur cette phrase un peu obscure.
PY

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: Identification des paiements.

Messagepar Eric Casellas » 25 Sep 2018, 13:29

Bonjour,

J'ai plus ou moins réussi à comprendre ce que tu veux (pas à partir de tes phrases mais de ton exemple de sortie attendue), a priori tu as plus un soucis de formalisation de ton d'algorithme que de langage info/R

Eric
Eric

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: Identification des paiements.

Messagepar Eric Wajnberg » 25 Sep 2018, 13:39

Brice ASSOUAKON a écrit :Bonjour Messieurs,
[..]

Sympa pour les filles qui se baladent sur ce forum.. Comment doit-on interpréter ce début de post ? (..)

Eric.

Brice ASSOUAKON
Messages : 5
Enregistré le : 17 Sep 2018, 08:43

Re: Identification des paiements.

Messagepar Brice ASSOUAKON » 25 Sep 2018, 14:36

Excusez ma maladresse chères dames et demoiselles.

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: Identification des paiements.

Messagepar Eric Casellas » 25 Sep 2018, 15:02

Bonjour,

Voici une proposition de code qui fait ce que tu demande sur la base de ton exemple, par contre c'est loin d'être optimal et il y a surement plus joli à faire...

Code : Tout sélectionner

AVANCES <- data.frame(ID=1:6,
                      Contrat=c("A", "A", "B", "B", "C", "C"),
                      Estimation=c(400, 500, 600, 800, 1000, 1500),
                      stringsAsFactors = FALSE)

PAIEMENT <- data.frame(Contrat=c(rep("A", 6), rep("B", 5)),
                       prime=c(rep(100, 6), rep(200, 5)),
                       stringsAsFactors = FALSE)


id_ref <- list()

for (ctr in unique(PAIEMENT$Contrat)) { #ctr="A"
  paie_ctr <- PAIEMENT$prime[PAIEMENT$Contrat==ctr]
  seuil_ctr <- AVANCES$Estimation[AVANCES$Contrat==ctr][1]
  id1 <- AVANCES$ID[AVANCES$Contrat==ctr][1]
  id2 <- AVANCES$ID[AVANCES$Contrat==ctr][2]
  cumul_ctr <- 0
  id_ref[[ctr]] <- rep(id1, length(paie_ctr))
  for (i in 1:length(paie_ctr)) {
    cumul_ctr <- cumul_ctr+paie_ctr[i]
    if (cumul_ctr>seuil_ctr) {
      id_ref[[ctr]][i] <- id2
    }
  }
 
}


PAIEMENT_avecID <- cbind(ID=unlist(id_ref), PAIEMENT)

Eric

Brice ASSOUAKON
Messages : 5
Enregistré le : 17 Sep 2018, 08:43

Re: Identification des paiements.

Messagepar Brice ASSOUAKON » 25 Sep 2018, 18:08

Merci pour les codes, il marchent. Cependant pouvez-vous m'apporter plus d'explication sur les lignes
des codes car je dois l'appliquer à mon cas ( des base de près de 1 000 000 de lignes). Merci

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: Identification des paiements.

Messagepar Eric Casellas » 26 Sep 2018, 08:14

Brice ASSOUAKON a écrit :Merci pour les codes, il marchent. Cependant pouvez-vous m'apporter plus d'explication sur les lignes
des codes car je dois l'appliquer à mon cas ( des base de près de 1 000 000 de lignes). Merci


Tu peut préciser stp ce sur quoi tu veux des explications?
Sinon en gros la 1ere boucle traite des différents contrat et la 2nd imbriqué se charge des cumuls des primes (y'a surement mieux à faire avec cumsum je dirai comme ça)
Eric

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Identification des paiements.

Messagepar Logez Maxime » 26 Sep 2018, 09:17

Bonjour,

une autre possibilité (à tester) :

Code : Tout sélectionner

library(dplyr)
library(tidyr)

contr <- unique(paiement$Contrat)
test <- vector("list", length(contr))
names(test) <- contr

for (i in contr) {
 l1 <- which(avance$Contrat == i)
 auxi <- findInterval(paiement2$prime2[paiement$Contrat == i]-1e-3, avance$Estimation[l1], rightmost.closed= TRUE)+1
 test[[i]] <- avance$ID[l1][auxi]
 }

paiement$ID <- unlist(test)
paiement <- paiement %>% fill(ID)
Cordialement,
Maxime

Brice ASSOUAKON
Messages : 5
Enregistré le : 17 Sep 2018, 08:43

Re: Identification des paiements.

Messagepar Brice ASSOUAKON » 26 Sep 2018, 11:06

Merci Eric Casellas,
J'ai pu comprendre et adapter le code. Merci

Brice ASSOUAKON
Messages : 5
Enregistré le : 17 Sep 2018, 08:43

Re: Identification des paiements.

Messagepar Brice ASSOUAKON » 27 Sep 2018, 08:16

Bonjour à tous.
Merci Logez Maxime pour les codes.
j'ai pu adapter le code de M. Eric Casellas à mon cas. Cependant la dernière ligne ne corresponds pas à la sortie que je souhaiterais avoir.
J'ai donc décidé d'utilisé un autre moyen pour cette ligne. le nouveau problème qui se présente à moi est de passer d'une liste à un data.frame.
Supposons que j'ai cette liste "brice"
brice<-list(papa=c("A","A","B"), nombre=c(1,2), tata=c(4,5,6,7,8))
j'aimerais avoir ce tableau ( Contrat et ID seront les entêtes du nouveau tableau créé)


Contrat ID
papa A
papa A
papa A
nombre 1
nombre 2
tata 4
tata 5
tata 6
tata 7
tata 8

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Identification des paiements.

Messagepar Pierre-Yves Berrard » 27 Sep 2018, 08:50

Bonjour,

Code : Tout sélectionner

brice_df <- data.frame(
  Contrat = rep(names(brice), lengths(brice)),
  ID      = unlist(brice, use.names = FALSE),
  stringsAsFactors = FALSE
)

Attention, les nombres dans ID seront convertis en caractères (car une colonne ne peut avoir qu'un type).
PY


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité