es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Nuevas variables utilizando identificadores vinculados a diferentes casos en datos longitudinales.

Tengo los siguientes datos de ejemplo:

id <- c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4)
id2 <- c(-1, -1, -1, 1, 1, 1, -1, -1, -1, 3, 3, 3)
x <- c(4, 5, 5, 1, 1, 1, 7, NA, 9, 2, 2, 2)
dat1 <- data.frame(id, id2, x)
dat1

dat1
id id2 x
1 1 -1 4
2 1 -1 5
3 1 -1 5
4 2 1 1
5 2 1 1
6 2 1 1
7 3 -1 7
8 3 -1 NA
9 3 -1 9
10 4 3 2
11 4 3 2
12 4 3 2

“id” se refiere a tres personas diferentes en tres momentos diferentes. “id2” es un enlace entre las diferentes personas; la persona 1 (id == 1) no tiene enlace (id2 == -1), la persona 2 (id == 2) hace referencia a la persona 1 (id2 == 1), la persona 3 (id == 3) no tiene enlace (id3 == -1) y la persona 4 hace referencia a la persona 3 (id2 == 3).

Ahora quiero crear una nueva variable “y” con esta regla: para una persona (id 1, 2 o 3), “y” siempre debe ser el valor de “x” de otra persona, que se puede identificar a través de “id2”. Eso significa que “y” es c(4, 5, 5) para la persona con “id” == 2 y “y” es c(7, NA, 9) para la persona con “id” == 4. Dado que no hay coincidencia para las personas con “id” == 1 y 3, “y” será “-1” en estos casos (también podría ser “NA”, redundante). Después, dat1 debería verse así:

id id2 x y
1 1 -1 4 -1
2 1 -1 5 -1
3 1 -1 5 -1
4 2 1 1 4
5 2 1 1 5
6 2 1 1 5
7 3 -1 7 -1
8 3 -1 NA-1
9 3 -1 9 -1
10 4 3 2 7
11 4 3 2 NA
12 4 3 2 9

¿Cómo hacerlo con dplyr?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar el paquete dplyr para crear la nueva variable y con el siguiente código:


    library(dplyr)
    dat1 %>%
    group_by(id) %>%
    mutate(y = ifelse(id2 == -1, -1, x[id2 == id]))

    Esto creará una nueva variable y con los valores descritos anteriormente.

Comments are closed.