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.

Reemplace una partición de una columna de una matriz por un vector.

Tengo 2 matrices/dataframes, A y B, cada una con dimensiones de 50×30.

¿Cómo puedo reemplazar los primeros 11 elementos de cada columna de la matriz A con los 11 elementos de cada columna, respectivamente, de la matriz B, sin tener que hacer un bucle para cada columna?

Ejemplo (para matrices 3×3 y n_replace = 2):

matriz A matriz B matriz resultante
v1 v2 v3 v1 v2 v3 v1 v2 v3
1 2 1 12 99 .31 -> 12 99 .31 # reemplazado de la matriz B
5 4 1 33 .2 12 33 .2 12 # reemplazado de la matriz B
9 2 3 10 .3 14 9 2 3 # se mantuvo de la matriz A

Pienso que puedo hacer algo como

for(i in 1:3) {
replace(A[,i], c(1:n_replace), B[1:n_replace,i])
}

¿Pero hay una forma más directa/inteligente de hacer esto en R?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma más sencilla de lograr esto en R utilizando la indexación. Aquí hay un ejemplo para tus matrices A y B con 11 elementos que se van a reemplazar:

    “`{r}
    n_replace <- 11
    A[,1:n_replace] <- B[,1:n_replace]


    Esto reemplazará los primeros 11 elementos de cada columna de la matriz A con los elementos correspondientes de la matriz B. Si tienes varias columnas que deseas reemplazar al mismo tiempo, puedes utilizar la indexación múltiple para seleccionar esas columnas: ```{r} n_replace <- 11 cols_to_replace <- c(1, 3, 5) # reemplazar las primeras, terceras y quintas columnas A[,cols_to_replace][,1:n_replace] <- B[,cols_to_replace][,1:n_replace]

    Esto reemplazará los primeros 11 elementos de las columnas especificadas de la matriz A con los elementos correspondientes de la matriz B. Observa que la primera operación de indexación selecciona las columnas deseadas, y la segunda operación de indexación aplica el reemplazo solo a los primeros 11 elementos de esas columnas.

Comments are closed.