problème date avec which

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

Audrey Winter
Messages : 97
Enregistré le : 12 Mai 2014, 15:17

problème date avec which

Messagepar Audrey Winter » 10 Avr 2017, 12:51

Bonjour,
dans une boucle j'alimente plusieurs data : une liste d'attente, une base décès et une base sortie.
J'ai une date de sortie et une date de décès estimées ainsi que "date_auj" qui évolue au cours du temps. J'aimerai faire sortir de LISTE les patients dont la date de décès ou de sortie estimée correspond à celle du jour et les mettre dans une autre base SORTIE OU DECES comme suit:

Code : Tout sélectionner

SORTIE <- rbind(SORTIE,LISTE[which(LISTE$date_sortie_estimee<=date_auj+1),])
LISTE <- LISTE[-which(LISTE$num_pat %in% SORTIE$num_pat),]
  DECES <- rbind(DECES,LISTE[which(LISTE$date_dc_estimee<=date_auj+1),])
  LISTE <- LISTE[-which(LISTE$num_pat %in% DECES$num_pat),]


J'ai déjà eu un premier problème car si je mets "==date_auj" ça ne fonctionne pas. Avec "<=date_auj+1" ça fonctionne ... bref comme ça pour SORTIE et DECES ça a l'air de marcher. Est ce à cause du format date ?

L'autre problème c'est que quand je veux enlever les patients de LISTE présents dans DECES et SORTIE, ça ne marche que si DECES et SORTIE sont non vides, sinn ca me renvoit une liste vide. Comment faire ?
Merci !

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: problème date avec which

Messagepar Mickael Canouil » 10 Avr 2017, 13:44

Bonjour,

pourriez-vous fournir, via "dput" par exemple (viewtopic.php?f=1&t=3302), un extrait de vos données.
Il sera ainsi plus facile de vous proposer des solutions.

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Audrey Winter
Messages : 97
Enregistré le : 12 Mai 2014, 15:17

Re: problème date avec which

Messagepar Audrey Winter » 10 Avr 2017, 14:35

Le dput() est un peu imbuvable ^^ voici un bout du head(), si ça peut aider :

Code : Tout sélectionner

 date_sortie_estimee date_dc_estimee    num_pat 
 2013-08-06            2016-07-15             1     
 2014-11-24            2009-01-31            2     
 2013-03-18            2127-06-02          3   
 2012-04-11            2011-06-05          4   
 2015-06-26            2009-12-07            5     
 2012-06-06            2009-02-23          6     


En gros je commence avec un pool de patients sur LISTE à une date donnée. J'ai alors ma base SORTIE et ma base DECES vides. (et c'est ca qui semble posé problème... je pensais la remplir avec un patient factice pour résoudre mon problème mais j'aurai aimé faire autrement)

J'ai attribué à chaque patient un "num_pat" pour les repérer et ils ont chacun une "date_dc_estimee" et une "date_sortie_estimee" (ce dont j'ai besoin pour les placer dans SORTIE ou DECES au fur et à mesure que le temps avance) + d'autres covariables.

Est ce plus clair ?

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

Re: problème date avec which

Messagepar Pierre-Yves Berrard » 11 Avr 2017, 07:21

Audrey Winter a écrit :Le dput() est un peu imbuvable ^^ voici un bout du head(), si ça peut aider

Juste les premières lignes alors :

Code : Tout sélectionner

dput(head(LISTE, 2))
voire

Code : Tout sélectionner

str(LISTE)


P.S. : les "which" sont superflus dans votre code

Code : Tout sélectionner

LISTE[-which(LISTE$num_pat %in% DECES$num_pat),]
équivaut à

Code : Tout sélectionner

LISTE[!LISTE$num_pat %in% DECES$num_pat,]
PY

Audrey Winter
Messages : 97
Enregistré le : 12 Mai 2014, 15:17

Re: problème date avec which

Messagepar Audrey Winter » 11 Avr 2017, 08:09

voici !

Code : Tout sélectionner

structure(list(Albu_cat = structure(3:4, .Label = c("0", "1",
"2", "3"), class = "factor"), Sexe = structure(c(2L, 1L), .Label = c("F",
"M"), class = "factor"), Cond_inscription = structure(c(1L, 1L
), .Label = c("DOM", "HOP", "USI"), class = "factor"), MELD_cat = structure(c(1L,
1L), .Label = c("0", "1", "2"), class = "factor"), BMI_classe = structure(2:3, .Label = c("0",
"1", "2"), class = "factor"), Super_Urgence = structure(c(1L,
1L), .Label = c("0", "1"), class = "factor"), Age_cat = structure(c(2L,
2L), .Label = c("0", "1", "2"), class = "factor"), Diabète = structure(c(1L,
1L), .Label = c("N", "O"), class = "factor"), Atc_tumeurs = structure(c(2L,
2L), .Label = c("N", "O"), class = "factor"), Sodium_cat = structure(c(1L,
1L), .Label = c("0", "1", "2"), class = "factor"), Dialyse_oui_non = structure(c(1L,
1L), .Label = c("N", "O"), class = "factor"), gpe_sanguin = structure(c(4L,
3L), .Label = c("A", "AB", "B", "O"), class = "factor"), Ascite_oui_non = structure(1:2, .Label = c("0",
"1"), class = "factor"), Encephalo_oui_non = structure(c(1L,
1L), .Label = c("0", "1"), class = "factor"), Maladie = structure(c(4L,
2L), .Label = c("1", "2", "3", "4", "5"), class = "factor"),
    inter_regions = structure(c(7L, 7L), .Label = c("1", "2",
    "3", "4", "5", "6", "7"), class = "factor"), annee = structure(c(7L,
    7L), .Label = c("2009", "2010", "2011", "2012", "2013", "2014",
    "rien"), class = "factor"), indice = c(0, 0), debut = structure(c(13580,
    13583), class = "Date"), sortie = c(1678.54171792987, 2153.82412082804
    ), dc = c(2752.31386997515, 30.316750401459), etat = c("sortie",
    "DCD"), date_sortie_estimee = structure(c(15923.5417179299,
    16398.824120828), class = "Date"), date_dc_estimee = structure(c(16997.3138699752,
    14275.3167504015), class = "Date"), num_pat = 1:2, RETH = c(0,
    0), temps_attente = c(665, 662)), .Names = c("Albu_cat",
"Sexe", "Cond_inscription", "MELD_cat", "BMI_classe", "Super_Urgence",
"Age_cat", "Diabète", "Atc_tumeurs", "Sodium_cat", "Dialyse_oui_non",
"gpe_sanguin", "Ascite_oui_non", "Encephalo_oui_non", "Maladie",
"inter_regions", "annee", "indice", "debut", "sortie", "dc",
"etat", "date_sortie_estimee", "date_dc_estimee", "num_pat",
"RETH", "temps_attente"), row.names = c("1", "2"), class = "data.frame")

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

Re: problème date avec which

Messagepar Pierre-Yves Berrard » 11 Avr 2017, 09:08

Audrey Winter a écrit :J'ai déjà eu un premier problème car si je mets "==date_auj" ça ne fonctionne pas. Avec "<=date_auj+1" ça fonctionne ... bref comme ça pour SORTIE et DECES ça a l'air de marcher. Est ce à cause du format date ?

class(date_auj) ?
si différent de "Date", essayer une conversion avec as.Date(date_auj)

edit :
Audrey Winter a écrit :L'autre problème c'est que quand je veux enlever les patients de LISTE présents dans DECES et SORTIE, ça ne marche que si DECES et SORTIE sont non vides, sinn ca me renvoit une liste vide. Comment faire ?

Tester si le nouveau SORTIE est non vide

Code : Tout sélectionner

SORTIE_new <- LISTE[LISTE$date_sortie_estimee == date_auj, ]
if (nrow(SORTIE_new) > 0) SORTIE <- rbind(SORTIE, SORTIE_new)

Même démarche pour DECES.
PY

Audrey Winter
Messages : 97
Enregistré le : 12 Mai 2014, 15:17

Re: problème date avec which

Messagepar Audrey Winter » 12 Avr 2017, 07:34

non date_auj est bien une date.
Oui pour sortie effectivement je pense que tester avt si la base est vide est une solution !
Mais j'aurai aimé comprendre pourquoi ca ne marche que qd la base n'est pas vide. ^^
Merci

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

Re: problème date avec which

Messagepar Pierre-Yves Berrard » 12 Avr 2017, 08:27

Audrey Winter a écrit :Mais j'aurai aimé comprendre pourquoi ca ne marche que qd la base n'est pas vide. ^^

C'est à cause du which...

Code : Tout sélectionner

d <- data.frame(a=1:2, b=3:4)

d[which(d$a == 1), ]
d[which(d$a == 3), ]
d[-which(d$a == 1), ]
d[-which(d$a == 3), ] # d[-integer(0), ]


d[d$a == 1, ]
d[d$a == 3, ]
d[!d$a == 1, ]
d[!d$a == 3, ] # d[c(TRUE, TRUE), ]
PY

Audrey Winter
Messages : 97
Enregistré le : 12 Mai 2014, 15:17

Re: problème date avec which

Messagepar Audrey Winter » 12 Avr 2017, 08:31

Sinn je voulais savoir : est-il possible d'avoir un "rbind intelligent"? C'est à dire coller deux datas qui ont les mêmes colonnes mais pas forcément dans le même ordre, exemple

Code : Tout sélectionner

> head(A)
age    sexe     taille   
67   F   172
45   M   189
68   M   165 ....

> head(B)
age      taille   sexe
18    176      F
24     162      M
78     192    F...

> rbind(A,B)
age      taille   sexe
18    176      F
24     162      M
78     192    F
67   172          F
45   189      M
68   165       M


Merci !

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

Re: problème date avec which

Messagepar Pierre-Yves Berrard » 12 Avr 2017, 21:12

La fonction à utiliser est ..
...
......
rbind !
PY


Retourner vers « Questions en cours »

Qui est en ligne

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