Je travaille avec un ensemble de données sur l'état de santé des patients au fil du temps. Je voudrais calculer la trame de données des transitions de l'état de santé actuel à l'état de santé suivant.Méthode efficace pour construire une trame de données de (état actuel, état suivant) dans R
Voici un exemple où l'état de santé est mesuré uniquement par le niveau et le poids de l'AFP. Les mesures de l'état de santé pourrait ressembler à ce qui suit:
x <- data.frame(id = c(1, 1, 1, 2, 2, 2),
day = c(1, 2, 3, 1, 2, 3),
event = c('status', 'status', 'death', 'status', 'status', 'status'),
afp = c(10, 50, NA, 20, 30, 40),
weight = c(100, 105, NA, 200, 200, 200))
La sortie souhaitée se présente comme suit:
y <- data.frame(id = c(1, 1, 2, 2),
current_afp = c(10, 50, 20, 30),
current_weight = c(100, 105, 200, 200),
next_event = c('status', 'death', 'status', 'status'),
next_afp = c(50, NA, 30, 40),
next_weight = c(105, NA, 200, 200))
Une façon inefficace pour obtenir la sortie est:
- prendre la produit croisé du cadre de données de mesures avec lui-même
- Conserver uniquement les lignes avec les ID correspondants et le jour .x + 1 = day.y
- renomme les colonnes
Est-il possible d'obtenir la sortie plus efficace?
Note: Les mesures réelles trame de données peut avoir plus de 10 colonnes, il est donc pas très efficace à partir d'une ligne de perspective de code pour écrire explicitement
current_afp = x$afp[1:(n-1)],
next_afp = x$afp[2:n]
...
et ainsi de suite.
Cette réponse est utile car elle applique les idiomes 'dplyr' que je n'avais pas rencontrés auparavant. –
@ILiketoCode Heureux que ça a aidé! –