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.

Obtener el número de índice de la primera y última fila en una ventana móvil.

Tengo un marco de datos donde:

df <- data.frame(position = c(1000,1156,3200,4629,5559,6100,7456,8208,9500,10000),
col1 = c(0,0,1,1,1,0,0,1,1,0))

Si quisiera utilizar ventanas deslizantes de tamaño 2000, deslizándose cada 1000 (comenzando desde 1000 y terminando en 10000) basado en los valores de posición, ¿qué comando puedo usar para obtener el número de índice de la primera y última fila de cada ventana? Por ejemplo, con este marco de datos, el resultado sería:

| ventana | indice_fila1 | indice_fila2 |
| 1 | 1 | 2 |
| 2 | 3 | 3 |
| 3 | 3 | 4 |
| 4 | 4 | 5 |
| 5 | 5 | 6 |
| 6 | 6 | 7 |
| 7 | 7 | 8 |
| 8 | 8 | 10 |

El resultado no tiene que estar en formato de tabla, solo busco un comando para obtener el número de índice de la primera y última fila en cada ventana.

Cualquier ayuda sería muy apreciada, ¡gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para obtener el número de índice de fila de la primera y última fila de cada ventana, puedes utilizar el siguiente comando en R:

    # establecer el tamaño de la ventana y el intervalo deslizante
    tamano_ventana <- 2000
    intervalo_deslizante <- 1000
    
    # calcular el número de ventanas
    num_ventanas <- ceiling((max(df$position) - min(df$position) - tamano_ventana)/intervalo_deslizante) + 1
    
    # inicializar vectores para almacenar los números de índice de fila
    indice_fila1 <- numeric(num_ventanas)
    indice_fila2 <- numeric(num_ventanas)
    
    # recorrer cada ventana y obtener los números de índice de fila
    for (i in 1:num_ventanas) {
      pos_inicio <- min(df$position) + ((i-1)*intervalo_deslizante)
      pos_fin <- pos_inicio + tamano_ventana
      indice_fila1[i] <- which.min(abs(df$position - pos_inicio))
      indice_fila2[i] <- which.min(abs(df$position - pos_fin))
    }
    
    # crear un marco de datos para almacenar los resultados
    df_resultado <- data.frame(ventana = 1:num_ventanas, indice_fila1, indice_fila2)
    
    # imprimir el resultado final
    df_resultado
    

    Este comando primero establece el tamaño de la ventana y el intervalo deslizante, y luego calcula el número de ventanas en base a los valores en position. Luego, inicializa dos vectores vacíos, indice_fila1 e indice_fila2, para almacenar los números de índice de fila de la primera y última fila de cada ventana. Después, recorre cada ventana y calcula las posiciones de inicio y fin en base al tamaño de la ventana y el intervalo deslizante. Luego, utiliza which.min para encontrar el índice del valor más cercano en df$position a las posiciones de inicio y fin, lo que proporciona los números de índice de fila de la primera y última fila de la ventana actual. Finalmente, el comando crea un marco de datos para almacenar los resultados y lo imprime.

Comments are closed.