Encuentre índices de elementos distintos de cero en array en R

En este artículo, discutiremos cómo encontrar los índices de elementos distintos de cero en Matrix en lenguaje de programación R.

Método 1: Usando el bucle for

Se puede realizar una iteración de bucle for sobre las filas y columnas para acceder a los valores de celda contenidos en una array. Cada elemento se verifica para un valor distinto de cero, y si cumple con la restricción, se muestran los índices de celda correspondientes. La complejidad temporal requerida es equivalente a O(n * m), donde n es el número de filas y m es el número de columnas. 

R

# declaring a matrix in R
mat <- matrix(c(-1, 2, 0, 6, 0, 4), nrow = 2)
print ("Original Matrix")
print (mat)
print ("Indices of non-zero elements")
  
# computing indexes of non 
# zero elements looping through 
# rows
for (i in 1:nrow(mat)){
  
    # looping through columns
    for(j in 1:ncol(mat)){
      
        # check if element is non 
          # zero
        if(mat[i,j]!=0){
          
            # display the row and column
              # index
            cat(i, j,"\n")             
        }
    }
}

Producción

[1] "Original Matrix"
    [,1] [,2] [,3]
[1,]   -1    0    0
[2,]    2    6    4
[1] "Indices of non-zero elements"
1 1
2 1
2 2
2 3 

Método 2: Usando el método which()

El método which() se usa para devolver la posición o el índice del valor que satisface las restricciones dadas. Aplica la condición sobre cada elemento del objeto R especificado, vector o marco de datos o array, y luego devuelve las posiciones de celda correspondientes de los valores satisfechos. Los valores faltantes o NA se tratan como FALSO en este método. 

Sintaxis: which(cond, arr.ind = FALSE)

Argumentos: 

cond: puede ser un vector lógico o una array. 

arr.ind – lógico; indicador de si se deben devolver los índices de la array.

En caso de que el parámetro arr.ind se establezca en FALSO, se devuelven los valores de celda y no los índices. Los índices devueltos se muestran en forma de tabla, con la fila y la columna como encabezados de las columnas respectivas. 

R

# declaring a matrix in R
mat <- matrix(c(-1, 2, 0, 6, 0, 4), nrow = 2)
print ("Original Matrix")
print (mat)
print ("Indices of non-zero elements")
  
# computing indexes of non zero 
# elements
which(mat != 0, arr.ind = T)

Producción:

[1] "Original Matrix"
    [,1] [,2] [,3]
[1,]   -1    0    0
[2,]    2    6    4
[1] "Indices of non-zero elements"
    row col
[1,]   1   1
[2,]   2   1
[3,]   2   2
[4,]   2   3

El método también funciona en el caso de arreglos o arrays de caracteres. En este caso, las posiciones de todas las celdas de la array se devuelven como salida. 

R

# declaring a matrix in R
mat <- matrix(letters[1:8], nrow = 2)
print ("Original Matrix")
print (mat)
print ("Indices of non-zero elements")
  
# computing indexes of non zero 
# elements
which(mat != 0, arr.ind = T)

Producción

[1] "Original Matrix"
    [,1] [,2] [,3] [,4]
[1,] "a"  "c"  "e"  "g"
[2,] "b"  "d"  "f"  "h"
[1] "Indices of non-zero elements"
    row col
[1,]   1   1
[2,]   2   1
[3,]   1   2
[4,]   2   2
[5,]   1   3
[6,]   2   3
[7,]   1   4
[8,]   2   4

Publicación traducida automáticamente

Artículo escrito por mallikagupta90 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *