Liste dates - intervalles de temps

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

Oriane Moyne
Messages : 17
Enregistré le : 20 Oct 2015, 15:50

Liste dates - intervalles de temps

Messagepar Oriane Moyne » 10 Mai 2016, 08:33

Bonjour à tous,

J'ai une liste correspondant à des dates de prélèvement regroupées par individu. Exemple :

Code : Tout sélectionner

liste$date
$`002`
 [1] "2010-03-30" "2010-05-11" "2010-06-16" "2011-02-16" "2012-04-10" "2012-05-02" "2012-10-02" "2012-10-16" "2013-05-21"
[10] "2014-04-22"

$`003`
 [1] "2010-02-16" "2010-06-01" "2010-08-17" "2010-11-29" "2011-05-03" "2011-05-31" "2011-08-23" "2011-10-11" "2011-12-13"
[10] "2012-04-18" "2012-07-31" "2012-08-03" "2013-07-09" "2013-10-25" "2013-12-17" "2014-02-11" "2014-03-25" "2014-10-21"
[19] "2014-12-16"

$`005`
[1] "2010-05-06" "2011-08-08" "2012-04-17" "2012-11-12" "2013-03-26" "2013-06-25" "2013-12-13"


J'ai donc une liste de dates (ordonnées par ordre croissant) pour chaque individu 2, 3 et 5.

Je cherche à connaitre, pour chaque prélèvement, la durée de suivi correspondante, c'est-à-dire pour chaque individu [[i]], la différence entre la date du prélèvement [[i]][j] et la date du premier prélèvement effectué chez ce patient.

J'ai essayé ça :

Code : Tout sélectionner

for(i in 1: nrow(liste)){
  for(j in 1: length(liste$date[[i]])){
   
  liste$suivi_total[[i]]<-difftime(max(liste$date[[i]]), min(liste$date[[i]]))
          liste$suivi_int[[i]][j]<-difftime(liste$date[[i]][j], liste$date[[i]][1])
       
  }
}


Quelqu'un a une idée ?

Merci !

Je pensais obtenir ainsi la durée total du suivi par individu suivi_total (ça c'est bon),
et une liste de durées de suivi intermédiaires pour chaque prélèvement, par patient liste$suivi_int.

J'obtiens le message d'erreur suivant :

Code : Tout sélectionner

Error in liste$suivi_int[[i]][j] <- difftime(liste$date[[i]][j],  :
  more elements supplied than there are to replace

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: Liste dates - intervalles de temps

Messagepar François Bonnot » 10 Mai 2016, 12:09

Bonjour,
Les données telles qu'elles sont présentées sont difficilement récupérables, utilisez plutôt le lien suivant:
http://forums.cirad.fr/logiciel-R/viewtopic.php?f=1&t=3302
François

Oriane Moyne
Messages : 17
Enregistré le : 20 Oct 2015, 15:50

Re: Liste dates - intervalles de temps

Messagepar Oriane Moyne » 10 Mai 2016, 15:24

Bonjour François,

Parlez-vous de ça ?

Code : Tout sélectionner

 dput(liste$date)
structure(list(`002` = structure(c(14698, 14740, 14776, 15021,
15440, 15462, 15615, 15629, 15846, 16182), class = "Date"), `003` = structure(c(14656,
14761, 14838, 14942, 15097, 15125, 15209, 15258, 15321, 15448,
15552, 15555, 15895, 16003, 16056, 16112, 16154, 16364, 16420
), class = "Date"), `005` = structure(c(14735, 15194, 15447,
15656, 15790, 15881, 16052), class = "Date"), `009` = structure(c(14649,
14692, 14754, 14845, 14883, 14936, 14984, 15049, 15104, 15125,
15153, 15183), class = "Date"), `010` = structure(c(14635, 14957,
15062, 15072, 15321, 15454, 15685, 15741, 16055, 16182, 16357
), class = "Date"), `014` = structure(c(14642, 14754, 15026,
15110, 15191, 15314, 15404, 15469, 15902, 15972, 16119, 16209,
16223, 16231, 16308, 16420), class = "Date"), `015` = structure(c(14615,
14642, 14699, 14718, 14747, 14781, 14811, 14853, 14873, 14903,
14951, 14993, 15090, 15167, 15232, 15321, 15350, 15447), class = "Date"),
    `017` = structure(c(14740, 14755, 14852, 14936, 15041, 15118,
    15216, 15302, 15405, 15496, 15587, 15678, 15769, 15853, 15958,
    16042, 16133, 16231, 16322, 16406), class = "Date"), `018` = structure(c(14698,
    14831, 14921, 15062, 15250, 15369, 15454, 15923, 16021, 16148,
    16294), class = "Date"), `022` = structure(c(14616, 14754,
    14992, 14994, 14995, 15027, 15223, 15286, 15475, 15629, 15734,
    16077, 16273), class = "Date"), `026` = structure(c(14768,
    14852, 15397, 15481, 15572, 15650, 15958, 16014, 16196, 16273,
    16378), class = "Date"), `027` = structure(c(14748, 14923,
    15223, 15430, 15506, 15781, 16000, 16205, 16329), class = "Date"),
    `030` = structure(c(14642, 14719, 14817, 15146, 15181, 15258,
    15384, 15482, 15575, 15650, 15909, 16140, 16175, 16301, 16343
    ), class = "Date"), `032` = structure(c(14768, 15370, 15636,
    15804), class = "Date"), `038` = structure(c(16294, 16329,
    16350), class = "Date"), `042` = structure(c(15148, 15293,
    15435), class = "Date"), `050` = structure(c(14845, 15454,
    15664, 15938, 16189), class = "Date"), `051` = structure(c(14614,
    14642, 14697, 14845, 14887, 15084, 15671, 15720, 15755, 15798,
    15839, 16098, 16203, 16315, 16352, 16399), class = "Date"),
    `052` = structure(c(14614, 14726, 14979, 15090, 15286, 15391,
    15524, 15555, 15573, 15594, 15734, 15853, 15958, 16112, 16273,
    16350), class = "Date"), `053` = structure(c(14649, 14733,
    14943, 15098, 15233, 15315, 15352, 15370, 15440), class = "Date"),
    `055` = structure(c(14685, 14686, 14720), class = "Date"),
    `058` = structure(c(14684, 14740, 14936, 15097, 15168, 15170,
    15188, 15251, 15286, 15377, 15405, 15482, 15546, 15636, 15667,
    15684, 15804, 15832, 15874, 15887, 15909, 15929, 16000, 16021,
    16045, 16196, 16252, 16301, 16364, 16392), class = "Date"),
    `060` = structure(c(14671, 14817, 14900, 15091, 15239, 15377,
    15600, 15842, 15958, 16183), class = "Date"), `065` = structure(c(14635,
    14677, 14796, 15020, 15076, 15111, 15139, 15286, 15545, 15636,
    15867, 16301), class = "Date"), `067` = structure(c(14676,
    14698, 14712, 14769, 14810, 14842, 14886, 14978, 15012, 15072,
    15146, 15174, 15252, 15306, 15348, 15411, 15428, 15447, 15482,
    15538, 15545, 15582, 15608, 15685, 15783, 15804, 15846, 15910,
    15912, 15979, 16084, 16280, 16318, 16378, 16413), class = "Date"),
    `070` = structure(c(15041, 15447, 15615, 15755, 15825, 16413
    ), class = "Date"), `071` = structure(c(14663, 14795, 14907,
    14964, 15090, 15299, 15629, 15867), class = "Date"), `079` = structure(c(14838,
    15056, 15244, 15552, 15979, 16308), class = "Date"), `086` = structure(c(14776,
    14988, 15293, 15356, 15587, 15685, 16021, 16217), class = "Date"),
    `087` = structure(c(14663, 14754, 14886, 15041, 15223, 15447,
    15517, 15601, 15804, 15986, 16091, 16280), class = "Date"),
    `088` = structure(c(14621, 14727, 14860, 14956, 14979, 15040,
    15083, 15126), class = "Date"), `091` = structure(c(14860,
    14928, 15019, 15145, 15222, 15329, 15355, 15453, 15720, 15791,
    15966, 16078, 16148, 16190, 16295, 16365), class = "Date"),
    `093` = structure(c(14719, 14908, 15146, 15526, 15552, 15650,
    15715, 15811, 15902, 16021, 16147), class = "Date"), `096` = structure(c(14803,
    14845, 14936, 16399), class = "Date"), `097` = structure(c(14768,
    15195, 15230, 15292, 15462, 15476, 15660, 15853, 15944, 16000,
    16029, 16091, 16107, 16196, 16259, 16268, 16351), class = "Date"),
    `098` = structure(c(14712, 14768, 14810), class = "Date"),
    `100` = structure(c(14992, 15321, 15426, 15538, 15636, 15811,
    15853), class = "Date"), `102` = structure(c(14754, 15048,
    15174, 15300, 15413, 15498, 15657, 15712, 15730, 15838, 15909,
    16014, 16140, 16231, 16356, 16357, 16427), class = "Date"),
    `107` = structure(c(14622, 14769, 14868, 14957, 14993, 15159,
    15209, 15294, 15426, 15496, 15611, 15721, 15825, 15832, 15979,
    16140, 16308), class = "Date"), `108` = structure(c(14803,
    15035, 15453, 15664, 15678, 15679, 15692, 16028, 16203, 16343,
    16378), class = "Date"), `113` = structure(c(14740, 15372,
    15433, 15545, 15580, 15643, 15701, 15846, 15945, 16014, 16413
    ), class = "Date"), `118` = structure(c(14637, 14692, 14716,
    14768, 14824, 14858, 14900, 14929, 14984), class = "Date"),
    `119` = structure(c(14637, 14748, 14818, 14916, 14993, 15105,
    15209, 15302, 15414, 15442, 15517, 15594, 15643, 15713, 15748,
    15769, 15958, 16106, 16169, 16330, 16357), class = "Date"),
    `123` = structure(c(14776, 14922, 15230, 15258, 15405, 15545,
    15629, 15723, 15916, 16105, 16336), class = "Date"), `125` = structure(c(14719,
    14858, 14985, 15223, 15454, 15471, 15783, 15874, 15972, 16084,
    16133, 16175, 16322, 16357), class = "Date"), `126` = structure(c(14692,
    14810, 14922, 15139, 15226, 15307, 15391, 15489, 15594), class = "Date"),
    `127` = structure(c(14692, 14838, 14923, 14958, 15041, 15098,
    15223, 15307, 15370, 15377, 15531, 15811, 15839, 15930, 15957,
    15989, 16049, 16063, 16080, 16129, 16149, 16171, 16213), class = "Date"),
    `128` = structure(c(14628, 14676, 14768, 14900, 14905, 14921,
    15054, 15132, 15331, 15342, 15355, 15489, 15573, 15614, 15671,
    15853, 15883, 15902, 15972, 16015, 16085, 16105, 16168, 16238,
    16350, 16378, 16394), class = "Date"), `129` = structure(c(14649,
    14705, 14858, 14936, 15005, 15170, 15195, 15257, 15342, 15355
    ), class = "Date"), `133` = structure(c(15722, 15874, 16112
    ), class = "Date"), `136` = structure(c(14670, 14865, 15013,
    15062), class = "Date"), `137` = structure(c(14740, 14943,
    15041, 15566, 15678, 15692, 15986, 16252, 16357, 16407), class = "Date"),
    `141` = structure(c(14644, 15586, 15839, 16353), class = "Date")), .Names = c("002",
"003", "005", "009", "010", "014", "015", "017", "018", "022",
"026", "027", "030", "032", "038", "042", "050", "051", "052",
"053", "055", "058", "060", "065", "067", "070", "071", "079",
"086", "087", "088", "091", "093", "096", "097", "098", "100",
"102", "107", "108", "113", "118", "119", "123", "125", "126",
"127", "128", "129", "133", "136", "137", "141"))

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

Re: Liste dates - intervalles de temps

Messagepar Serge Rapenne » 10 Mai 2016, 17:36

bonjour,

pour la 1ere prélèvement :

Code : Tout sélectionner

as.Date(sapply(dta,min),origin="1970-01-01")
        002          003          005          009          010          014
"2010-03-30" "2010-02-16" "2010-05-06" "2010-02-09" "2010-01-26" "2010-02-02"
         015          017          018          022          026          027
"2010-01-06" "2010-05-11" "2010-03-30" "2010-01-07" "2010-06-08" "2010-05-19"
         030          032          038          042          050          051
"2010-02-02" "2010-06-08" "2014-08-12" "2011-06-23" "2010-08-24" "2010-01-05"
         052          053          055          058          060          065
"2010-01-05" "2010-02-09" "2010-03-17" "2010-03-16" "2010-03-03" "2010-01-26"
         067          070          071          079          086          087
"2010-03-08" "2011-03-08" "2010-02-23" "2010-08-17" "2010-06-16" "2010-02-23"
         088          091          093          096          097          098
"2010-01-12" "2010-09-08" "2010-04-20" "2010-07-13" "2010-06-08" "2010-04-13"
         100          102          107          108          113          118
"2011-01-18" "2010-05-25" "2010-01-13" "2010-07-13" "2010-05-11" "2010-01-28"
         119          123          125          126          127          128
"2010-01-28" "2010-06-16" "2010-04-20" "2010-03-24" "2010-03-24" "2010-01-19"
         129          133          136          137          141
"2010-02-09" "2013-01-17" "2010-03-02" "2010-05-11" "2010-02-04"

pour les écarts entre les dates :

Code : Tout sélectionner

sapply(dta,function(x) difftime(head(x,-1),tail(x,-1)))
$`002`
Time differences in days
[1]  -42  -36 -245 -419  -22 -153  -14 -217 -336

$`003`
Time differences in days
 [1] -105  -77 -104 -155  -28  -84  -49  -63 -127 -104   -3 -340 -108  -53  -56
[16]  -42 -210  -56

$`005`
Time differences in days
[1] -459 -253 -209 -134  -91 -171
.
.
.
$`137`
Time differences in days
[1] -203  -98 -525 -112  -14 -294 -266 -105  -50

$`141`
Time differences in days
[1] -942 -253 -514


Serge

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: Liste dates - intervalles de temps

Messagepar François Bonnot » 11 Mai 2016, 06:09

Parlez-vous de ça ?

Bonjour,
Oui, sauf que le code n'est pas reproductible et que les 3 premiers membres de la liste suffisent pour répondre à la question, donc:

Code : Tout sélectionner

liste <- structure(list(`002` = structure(c(14698, 14740, 14776, 15021,
15440, 15462, 15615, 15629, 15846, 16182), class = "Date"), `003` = structure(c(14656,
14761, 14838, 14942, 15097, 15125, 15209, 15258, 15321, 15448,
15552, 15555, 15895, 16003, 16056, 16112, 16154, 16364, 16420
), class = "Date"), `005` = structure(c(14735, 15194, 15447,
15656, 15790, 15881, 16052), class = "Date")), .Names = c("002",
"003", "005"))

Par suite, pour obtenir successivement les durées intermédiaires (si j'ai bien compris la question) et la durée totale:

Code : Tout sélectionner

(liste1 <- sapply(liste, function(x) as.numeric(as.Date(x)-as.Date(x[1]))))
sapply(liste1, max)
François


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité