J'ai un DF avec l'ID, les dates d'enregistrement et vérifiez les patients et le nombre de jours dans un hôpital. J'ai besoin d'un nouveau df où j'ai une instance d'identité pour chaque jour entre la date à laquelle un patient est enregistré et vérifié. J'ai besoin de quelque chose comme ça, pour les 2 premières lignes ci-dessus mon système:
R version 3.5.1 (2018-07-02)
Plate-forme: x86_64-Apple-Darwin15.6.0 (64 bits)
Exécution sous: MacOS 10.14.4 P>
# Here is my original DF:
df <- structure(list(id = c("4317107984013", "4317107984035", "4317107984046",
"4317107984057", "4317107984079", "4317107984090", "4318100215913",
"4317108791611", "4317107931059", "4317108756092"), dt_in = structure(c(17482,
17492, 17488, 17497, 17485, 17489, 17535, 17514, 17493, 17493
), class = "Date"), dt_out = structure(c(17498, 17499, 17499,
17499, 17499, 17499, 17535, 17514, 17493, 17527), class = "Date"),
stay = c(16L, 7L, 11L, 2L, 14L, 10L, 0L, 0L, 0L, 34L)), row.names = c(NA,
10L), class = "data.frame")
4 Réponses :
library(tidyverse) library(lubridate) dat%>% group_by(id)%>% transmute(dt = list(seq(ymd(dt_in),ymd(dt_out),1)))%>% unnest() # A tibble: 104 x 2 # Groups: id [10] id dt <chr> <date> 1 4317107984013 2017-11-12 2 4317107984013 2017-11-13 3 4317107984013 2017-11-14 4 4317107984013 2017-11-15 5 4317107984013 2017-11-16 6 4317107984013 2017-11-17 7 4317107984013 2017-11-18 8 4317107984013 2017-11-19 9 4317107984013 2017-11-20 10 4317107984013 2017-11-21 # ... with 94 more rows
Ce code a fonctionné comme un charme dans chaque DF que j'ai testé, même grandes. Merci pour l'aide
avec dplyr code> et titsyr code>, vous pouvez faire:
Merci. Ça a marché. Lorsque j'ai utilisé dans un ensemble de données volumineux (12 millions de lignes) avaient une erreur. Je le publierai bientôt.
une option avec ou une option avec map2 code>
base r code> p>
Vous pouvez utiliser Uncount code> à partir de tiardy code> -