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.

Duplicación de valores de la matriz al lado del valor original en R

Tengo una matriz que incluye datos simulados. Los datos están relacionados con una situación de mediciones repetidas, y para una variable me gustaría duplicar los valores simulados. La matriz actual se ve así:

Las columnas representan las mediciones repetidas, las filas indican el individuo. Es importante que el valor duplicado esté junto al valor original, para que se vea así (para la primera línea):

Intenté algunas formas, pero eso resultó en obtener la secuencia de duplicados comenzando desde la columna 7. ¿Hay alguna manera de obtener este resultado (fácilmente)? Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera fácil de obtener el resultado deseado utilizando la función replicate() en R.

    Primero, podemos crear una nueva matriz con el doble de columnas que la matriz original usando la función matrix().

    # matriz original
    original_matrix <- matrix(c(1.647, 1.125, 0.559, 1.614, 1.578, 0.377,
                                0.555, 0.395, 1.090, 0.896, 2.135, 1.184,
                                0.269, 2.022, -0.184, 0.614, 1.128, 1.036), 
                              nrow = 3, ncol = 6, byrow = TRUE)
    
    # crear una nueva matriz con el doble de columnas
    new_matrix <- matrix(0, nrow = nrow(original_matrix), ncol = ncol(original_matrix) * 2)
    
    # usar la función replicate() para duplicar los valores de cada columna
    for (i in 1:ncol(original_matrix)) {
      new_matrix[, c((2 * i) - 1, 2 * i)] <- replicate(2, original_matrix[, i])
    }
    
    # imprimir la nueva matriz
    new_matrix
    

    Esto nos dará el resultado deseado:

           [,1]  [,2]   [,3]  [,4]   [,5]  [,6]  [,7]  [,8]  [,9] [,10] [,11] [,12]
    [1,] 1.647 1.647 1.125 1.125 0.559 0.559 1.614 1.614 1.578 1.578 0.377 0.377
    [2,] 0.555 0.555 0.395 0.395 1.090 1.090 0.896 0.896 2.135 2.135 1.184 1.184
    [3,] 0.269 0.269 2.022 2.022 -0.184 -0.184 0.614 0.614 1.128 1.128 1.036 1.036
    

    En el código anterior, primero creamos una nueva matriz con el doble de columnas que la matriz original y la llenamos con ceros usando la función matrix(). Luego, usamos un ciclo for para iterar sobre cada columna de la matriz original. Dentro del ciclo, usamos la función replicate() para duplicar los valores de cada columna y asignarlos a las columnas correspondientes de la nueva matriz.

    Al usar replicate(2, original_matrix[, i]), creamos un vector que contiene dos copias de los valores de la columna i de la matriz original. Luego, asignamos la primera copia a la columna i y la segunda copia a la columna (i+6) de la nueva matriz usando la expresión de indexación [, c((2 * i) - 1, 2 * i)].

    De esta manera, nos aseguramos de que los valores duplicados se coloquen junto a los valores originales en la nueva matriz.

Comments are closed.