En este artículo, discutiremos cómo dividir cada fila de la array por elementos vectoriales en el lenguaje de programación R.
Método 1: usando la división estándar
Inicialmente, se calcula la transpuesta de la array, para intercambiar filas y columnas. Inicialmente, si las dimensiones de la array eran n * m, la transposición convierte las dimensiones en m * n. La transposición de la array debe calcularse porque el operador de división booleano «/» se aplica por columnas y necesitamos calcular la división por filas. Luego se aplica la operación de división utilizando la array transpuesta como un operando y el vector como el otro. Luego se toma la transposición de este resultado, para preservar nuevamente el orden de filas y columnas.
Sintaxis:
t(array_transpuesta/vector)
Ejemplo:
R
# creating matrix matrix <- matrix(1:12,ncol=3) print ("Original Matrix") print (matrix) # creating vector vec <- c(1:3) # transpose matrix trans_mat <- t(matrix) # computing division div <- t(trans_mat/vec) print ("Division matrix") print (div)
Producción
[1] "Original Matrix" [,1] [,2] [,3] [1,] 1 5 9 [2,] 2 6 10 [3,] 3 7 11 [4,] 4 8 12 [1] "Division matrix" [,1] [,2] [,3] [1,] 1 2.5 3.000000 [2,] 2 3.0 3.333333 [3,] 3 3.5 3.666667 [4,] 4 4.0 4.000000
Método 2: Usando el método de barrido()
Este método en lenguaje R devuelve una array obtenida de una array de entrada mediante el barrido de una estadística de resumen. El método se utiliza para calcular operaciones aritméticas en el marco de datos sobre el eje elegido. Para la operación por filas, el eje elegido es 2 y el operando se convierte en la fila del marco de datos. El resultado tiene que ser almacenado en otra variable. El tiempo incurrido en esta operación es equivalente al número de filas en el marco de datos. El tipo de datos de la columna resultante es el tipo de datos compatible más grande.
Sintaxis: barrido (df, eje, vec, op)
Parámetro:
- df – Marco de datos
- eje: para calcularlo en filas, use el eje = 1 y para las columnas, use el eje = 2
- vec: el vector que se aplicará en el marco de datos
- op – El operador a aplicar
Ejemplo:
R
# creating matrix matrix <- matrix(1:12,ncol=3) print ("Original Matrix") print (matrix) # creating vector vec <- c(1:3) # computing division div <- sweep(matrix, 2, vec, "/") print ("Division matrix") print (div)
Producción
[1] "Original Matrix" [,1] [,2] [,3] [1,] 1 5 9 [2,] 2 6 10 [3,] 3 7 11 [4,] 4 8 12 [1] "Division matrix" [,1] [,2] [,3] [1,] 1 2.5 3.000000 [2,] 2 3.0 3.333333 [3,] 3 3.5 3.666667 [4,] 4 4.0 4.000000
Método 3: Usar el método rep()
El método rep(x) en R se usa para replicar los valores en el vector x. Toma como argumento el argumento “cada”, donde cada elemento se repite cada número de veces. La función rep() replica valores numéricos, o texto, o los valores de un vector por un número específico de veces.
Sintaxis: rep ( vec, each = )
Parámetro:
- vec : El vector cuyo valor se replica.
- each : entero no negativo. Otras entradas se coaccionarán a un número entero o vector doble y se tomará el primer elemento.
La idea de la aplicación del método rep() aquí es crear una réplica del vector y apilarlo, para crear un número de copias equivalente al número de filas. Esto es seguido por la división de las arrays involucradas.
Ejemplo:
R
# creating matrix matrix <- matrix(1:16,ncol=2) print ("Original Matrix") print (matrix) # creating vector vec <- c(1:2) # calculating rows rows <- nrow(matrix) # computing division div <- matrix / rep(vec, each = rows) print ("Division matrix") print (div)
Producción
[1] "Original Matrix" [,1] [,2] [1,] 1 9 [2,] 2 10 [3,] 3 11 [4,] 4 12 [5,] 5 13 [6,] 6 14 [7,] 7 15 [8,] 8 16 [1] "Division matrix" [,1] [,2] [1,] 1 4.5 [2,] 2 5.0 [3,] 3 5.5 [4,] 4 6.0 [5,] 5 6.5 [6,] 6 7.0 [7,] 7 7.5 [8,] 8 8.0
Método 4: Usando el método apply()
El método apply() es una forma de método de colección, que se utiliza para aplicar transformaciones sobre todo el objeto especificado. El método apply() toma como entrada el marco de datos o array y da salida en vector, lista o array.
Sintaxis: apply (array, eje, FUN)
Parámetro:
- array : una array o array
- eje : indicador del eje sobre el que se aplica la transformación
- eje = 1: manipulación por filas
- eje = 2: manipulación por columnas
- axis=c(1,2) : la manipulación se realiza en filas y columnas
- FUN: dice qué función aplicar.
La transposición del resultado debe calcularse para preservar el orden después de la aplicación del método apply() porque el método apply() devuelve la array transpuesta.
Ejemplo:
R
# creating matrix matrix <- matrix(1:16,ncol=2) print ("Original Matrix") print (matrix) # creating vector vec <- c(1:2) # calculating rows rows <- nrow(matrix) # computing division div <- t(apply(matrix, 1, "/", vec)) print ("Division matrix") print (div)
Producción
[1] "Original Matrix" [,1] [,2] [1,] 1 9 [2,] 2 10 [3,] 3 11 [4,] 4 12 [5,] 5 13 [6,] 6 14 [7,] 7 15 [8,] 8 16 [1] "Division matrix" [,1] [,2] [1,] 1 4.5 [2,] 2 5.0 [3,] 3 5.5 [4,] 4 6.0 [5,] 5 6.5 [6,] 6 7.0 [7,] 7 7.5 [8,] 8 8.0
Método 5: Usar el operador %*%
El operador %*% es un tipo especial de operador de multiplicación, definido para la multiplicación de arrays. Este operador se usa para multiplicar una array con su transpuesta. Inicialmente, la array diagonal se calcula para el vector especificado, usando la función diag() en R. Toma como argumento el inverso del vector, y luego esta array se multiplica con la array original para producir la división. Esto elimina la necesidad de una división explícita, porque ya se tiene en cuenta la inversa.
Sintaxis: diag(x)
Parámetro:
x: vector a estar presente como los elementos diagonales.
Ejemplo:
R
# creating matrix matrix <- matrix(1:16,ncol=2) print ("Original Matrix") print (matrix) # creating vector vec <- c(1:2) # calculating rows rows <- nrow(matrix) # computing division div <- matrix %*% diag(1 / vec) print ("Division matrix") print (div)
Producción
[1] "Original Matrix" [,1] [,2] [1,] 1 9 [2,] 2 10 [3,] 3 11 [4,] 4 12 [5,] 5 13 [6,] 6 14 [7,] 7 15 [8,] 8 16 [1] "Division matrix" [,1] [,2] [1,] 1 4.5 [2,] 2 5.0 [3,] 3 5.5 [4,] 4 6.0 [5,] 5 6.5 [6,] 6 7.0 [7,] 7 7.5 [8,] 8 8.0
Publicación traducida automáticamente
Artículo escrito por yashkumar0457 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA