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.

Fusionando índices superpuestos

Tengo un data.frame con índices de inicio y fin (ordenados), por ejemplo:

df <- data.frame(start.idx = c(1,2,5),
                 end.idx = c(2,3,6))

Estoy buscando una función que fusionará las filas i e i-1 si start.idx[i] == end.idx[i-1], de manera que el índice de inicio de la nueva fila sea start.idx[i-1] y el de fin sea end.idx[i].

Para el ejemplo anterior, el nuevo data.frame fusionado será:

res.df <- data.frame(start.idx = c(1,5),
                     end.idx = c(3,6))
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para fusionar filas si start.idx[i] == end.idx[i-1], se puede utilizar el paquete intervals en R.

    Primero, necesitamos convertir las columnas start.idx y end.idx en un objeto de intervalo utilizando la función Intervals() del paquete intervals. Luego, podemos usar la función reduce() para fusionar los intervalos superpuestos.

    Aquí está el código:

    library(intervals)
    
    # crear el data.frame
    df <- data.frame(start.idx = c(1,2,5),
                     end.idx = c(2,3,6))
    
    # convertir a objeto de intervalo
    intervals_df <- Intervals(as.matrix(df))
    
    # fusionar intervalos superpuestos
    merged_intervals <- reduce(intervals_df)
    
    # convertir de nuevo a data.frame
    res.df <- as.data.frame(merged_intervals)
    

    El res.df resultante contendrá los intervalos fusionados como se desea:

      start end
    1     1   3
    2     5   6
    

Comments are closed.