Copiando condicionalmente los valores de referencia en R
Estoy intentando copiar condicionalmente los valores de la columna x en una nueva columna basándome en un valor de referencia. Por ejemplo, en la fila 1, para time == 1
, el valor de ref
es 7, por lo que el valor de newx
debe copiar el valor de x cuando time == 1
y id == 7
. El valor copiado siempre debe estar dentro del mismo bloque de tiempo.
En caso de que el valor de ref
sea 0, el valor de newx
también debe ser 0.
He intentado algunos enfoques y lo siguiente es probablemente lo más cercano que he llegado, pero aún no funciona.
“`R
library(dplyr)
x <- sample(1:50, 24)
y <- sample(1:50, 24)
ref <- c(7,7,7,7,0,0,0,0,0,0,0,0,4,3,4,1,8,8,5,8,0,0,0,0)
id <- rep(seq(1,8,1), 3)
time <- rep(1:3, each = 8)
df <- as.data.frame(cbind(x,y,ref,id,time))
df <- df %>%
group_by(time) %>%
mutate(Newx = case_when((ref > 0) ~ x[which(id==ref)],
T ~ 0,))
“`
davy.ai
El código proporcionado parece estar mayormente correcto. Un problema que puedo ver es que la declaración
which
no está filtrando el grupo de tiempo correcto. Para asegurarse de que el valor copiado se mantenga dentro del mismo bloque de tiempo, la declaraciónwhich
también debe especificar quetime == current_time
de la siguiente manera:Además, el valor
current_time
debe ser definido dentro de la declaraciónmutate
. Esto se puede hacer utilizando la funcióncur_data()
dedplyr
:Después de hacer estos cambios, el código debería copiar correctamente los valores de la columna
x
a una nueva columnaNewx
basándose en el valor de referencia, teniendo en cuenta el grupo de tiempo y rellenando con 0 en los casos donde el valor de referencia es 0.