¿Hay forma de realizar 2 operaciones para cada grupo? Ejemplo que se muestra a continuación

> asd <- data.frame(Cat = c("A","B","B","A","B","A"), Start_num = c(2, 5, 1, 6, 6, 4), End_num = c(3, 7, 4, 7, 8, 5))
> asd
  Cat Start_num End_num
1   A         2       3
2   B         5       7
3   B         1       4
4   A         6       7
5   B         6       8
6   A         4       5

Producción esperada

Cat Start_num   End_num   True/False
A       2        3        TRUE
A       4        5        TRUE
A       6        7        NA
B       1        4        TRUE
B       5        7        FALSE
B       6        8        NA

Así que básicamente , Primero necesitamos ordenar el marco de datos por número de inicio en orden ascendente por grupo Gato En segundo lugar, necesitamos crear otra columna Verdadero / Falso que indique si el núm_inicio de la segunda fila es mayor que el núm_fin de la primera fila. Ejemplo La primera fila es Verdadero ya que para A (4 - 3) es Verdadero y así sucesivamente. Pero el último registro de cada gato debería NA ya que termina ahí. ¿Es posible lograrlo? ¿Alguien puede ayudarme?

r
0
vit p 22 ene. 2021 a las 16:35

1 respuesta

La mejor respuesta

Prueba a continuación. Puede organizar inicialmente y luego usar lead() para hacer la comparación y alcanzar el resultado esperado:

library(dplyr)
#Code
new <- asd %>% arrange(Cat,Start_num) %>%
  group_by(Cat) %>%
  mutate(Var=lead(Start_num)>End_num)

Salida:

# A tibble: 6 x 4
# Groups:   Cat [2]
  Cat   Start_num End_num Var  
  <chr>     <dbl>   <dbl> <lgl>
1 A             2       3 TRUE 
2 A             4       5 TRUE 
3 A             6       7 NA   
4 B             1       4 TRUE 
5 B             5       7 FALSE
6 B             6       8 NA   
0
Duck 22 ene. 2021 a las 13:44