Crear nueva variable si la segunda fila de una columna coincide con un valor en R.
Me gustaría crear una nueva variable A_row_error que ponga ‘TRUE’ si first_A_row = TRUE y el mensaje de la siguiente fila = ERROR (y FALSE si la siguiente fila cuando A_row_error = TRUE es cualquier otro mensaje). Tenga en cuenta que la siguiente fila está determinada por la marca temporal y debe estar en orden ascendente. El mensaje TRUE para A_row_error también debe estar en la misma fila que cuando first_A_row = TRUE (vea la tabla de abajo para ver la salida deseada).
Conjunto de datos de ejemplo:
participant_id <- c(“ps1”, “ps1”, “ps1”, “ps1”, “ps2”, “ps2”, “ps3”, “ps3”, “ps3”, “ps3”)
timestamp <- c(0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04)
event <- c(“A”, “A”, “A”, “B”, “B”, “A”, “A”, “A”, “B”, “A”)
first_A_row <- c(“TRUE”, “FALSE”, “FALSE”, “FALSE”, “FALSE”, “TRUE”, “TRUE”, “FALSE”, “FALSE”, “FALSE”)
message <- c(“ACCEPTED”, “ERROR”, “DECLINED”, “ACCEPTED”, “HELLO”, “BYE”, “ACCEPTED”, “BYE”, “ERROR”, “ACCEPTED”)
data.frame(participant_id, timestamp, event, first_A_row, message)
Resultado deseado:
participantid | timestamp | event | firstArow | message | Arow_error |
---|---|---|---|---|---|
ps1 | 0.01 | A | TRUE | ACCEPTED | TRUE |
ps1 | 0.02 | A | FALSE | ERROR | FALSE |
ps1 | 0.03 | A | FALSE | DECLINED | FALSE |
ps1 | 0.04 | B | FALSE | ACCEPTED | FALSE |
ps2 | 0.01 | B | FALSE | HELLO | FALSE |
ps2 | 0.02 | A | TRUE | BYE | FALSE |
ps3 | 0.01 | A | TRUE | ACCEPTED | FALSE |
ps3 | 0.02 | A | FALSE | BYE | FALSE |
ps3 | 0.03 | B | FALSE | ERROR | FALSE |
ps3 | 0.04 | A | FALSE | ACCEPTED | FALSE |
davy.ai
Puede usar la función
ifelse
para crear la variableA_row_error
. La sintaxis paraifelse
esifelse(testigo, sí, no)
, dondetestigo
es una declaración lógica,sí
es el valor devuelto si la declaración esVERDADERO
, yno
es el valor devuelto si la declaración esFALSO
.En este caso, la declaración lógica sería
first_A_row == TRUE & message == "ERROR"
, y el valorsí
seríaVERDADERO
y el valorno
seríaFALSO
.Por lo tanto, el código para crear la variable
A_row_error
sería:A_row_error <- ifelse(first_A_row == TRUE & message == "ERROR", TRUE, FALSE)