Estoy comparando valores en la misma columna para diferentes filas y, dependiendo del valor, quiero dar un resultado. Debajo de la mesa. Tengo los ID y quiero obtener los valores de la columna "Resultado". La columna "Lo que tengo" es lo que obtengo de mi función. Condiciones para los resultados: si el ID (n) es diferente del ID de la fila anterior (n-1), entonces el Resultado (n) es A. Si el ID (n) es el mismo que en el ID de la fila antes y diferente de la siguiente fila (n + 1), el resultado (n) es C.Otros casos es B.
l <- ifelse ((df$ID[1:(nrow(df)-1)] != df$ID[2:(nrow(df)+0)]),print("A"),
ifelse(((df$ID[1:(nrow(df)-1)] == df$ID[2:(nrow(df)+0)]) & (df$ID[2:(nrow(df)+0)] != df$ID[3:(nrow(df)+1)])), print ("C"),print ("B")))
df
ID Result What I have
1 12 A A
2 13 A A
3 14 A A
4 15 A B
5 15 B B
6 15 B B
7 15 B B
8 15 B C
9 15 C A
10 16 A NA
11 17 A NA
Muchas gracias por adelantado
Usando lead
from dplyr
y ifelse
puedes hacerlo de esta manera:
library(dplyr)
df$Result <- ifelse(df$ID != lag(df$ID) | is.na(lag(df$ID)), 'A',
ifelse(df$ID == lag(df$ID) & df$ID != lead(df$ID), 'C', 'B' ))
Producción:
> df
ID Result
1 12 A
2 13 A
3 14 A
4 15 A
5 15 B
6 15 B
7 15 B
8 15 B
9 15 C
10 16 A
11 17 A
Algunas palabras para aclarar: lag
desplaza la columna en 1 fila mientras que lead
hace exactamente lo contrario, es decir, retrocede la columna en 1 fila. Compruébalo lag(df$ID)
y lead(df$ID)
para visualizarlo.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras