¿Cómo cambiar los valores de fila en función de un valor de columna en el marco de datos R?

En este artículo, veremos cómo cambiar los valores en las filas en función de los valores de las columnas en el marco de datos en el lenguaje de programación R.

Sintaxis: df[expresión,] <- newrowvalue

Argumentos: 

  • df – Marco de datos para simular la modificación en
  • expresión: expresión para evaluar los datos de la celda en función de un valor de columna
  • newrowvalue: el valor modificado para reemplazar el valor anterior con

Devoluciones: no devuelve nada, pero realiza cambios en el marco de datos. 

El siguiente fragmento de código es un ejemplo de cómo cambiar el valor de la fila en función de un valor de columna en R. Comprueba si en la columna C3, el valor de la celda es inferior a 11, reemplaza el valor de la fila correspondiente, manteniendo la columna igual con NA. Este enfoque toma un tiempo cuadrático equivalente a las dimensiones del marco de datos. 

Ejemplo:

R

# declaring a data frame in R
data_frame = data.frame(C1= c(5:8),C2 = c(1:4),
                        C3 = c(9:12),C4 =c(13:16))
  
print("Original data frame")
print(data_frame)
  
# replace the row value with NA if the col 
# value in C3 is less than 11 looping over 
# the data frame values
for (i in 1:nrow(data_frame)){
for(j in 1:ncol(data_frame)) {       
          
    # checking if the column is C3 that is 
      # j index is 3
    if(j==3){
          
        # checking if the row value of c3 is
        # less than 11
        if(data_frame[i,j]<11){
              
            # changing the row value in the 
            # data frame
            data_frame[i,j] <- NA
            }
        }    
    }
}
  
# printing modified data frame
print ("Modified data frame")
print (data_frame)

Producción:

[1] “Marco de datos original”

 C1 C2 C3 C4

1 5 1 9 13

2 6 2 10 14

3 7 3 11 15

4 8 4 12 16

[1] “Marco de datos modificado”

 C1 C2 C3 C4

1 5 1 ND 13

2 6 2 ND 14

3 7 3 11 15

4 8 4 12 16

Este enfoque puede optimizarse, en caso de que conozcamos el valor del índice de la columna para realizar la evaluación. En ese caso, no iteraremos sobre todo el marco de datos, sino solo sobre los valores de la columna. 

Ejemplo:

R

# declaring a data frame in R
data_frame = data.frame(C1= c(5:8),C2 = c(1:4),
                        C3 = c(9:12),C4 =c(13:16))
  
print("Original data frame")
print(data_frame)
  
# replace the row value with 0 if the
# data element at col index 2 is divisible 
# by 2 looping over the rows of data frame
for (i in 1:nrow(data_frame)){
      
    # iterate over the 2nd column only of the
    # data frame and check if divisible by 2
    if(data_frame[i,2]%%2){
           
        # replace the value with 0
        data_frame[i,2]<-0
        }
}
  
# printing modified data frame
print ("Modified data frame")
print (data_frame)

Producción:

[1] “Marco de datos original”

 C1 C2 C3 C4

1 5 1 9 13

2 6 2 10 14

3 7 3 11 15

4 8 4 12 16

[1] “Marco de datos modificado”

 C1 C2 C3 C4

1 5 0 9 13

2 6 2 10 14

3 7 0 11 15

4 8 4 12 16

R también proporciona una forma integrada de manejar estas transformaciones de fila, simplemente especificando la condición que se evaluará como el índice de fila del marco de datos. Los valores reasignados se reemplazan dentro del marco de datos. En este caso, no se requiere una iteración explícita sobre el marco de datos. 

Ejemplo:

R

# declaring a data frame in R
data_frame = data.frame(C1= c(1,2,2,1),C2 = c(1:4),
                        C3 = c(9:12),C4 =c(13:16))
  
print("Original data frame")
print(data_frame)
  
# check if c1 value is greater than
# equal to 1, replaced by 3
data_frame[data_frame$C1>=1 ,] <- 3
  
print("Modified data frame")
print(data_frame)

Producción:

[1] “Marco de datos original”

 C1 C2 C3 C4

1 1 1 9 13

2 2 2 10 14

3 2 3 11 15

4 1 4 12 16

[1] “Marco de datos modificado”

 C1 C2 C3 C4

1 3 3 3 3

2 3 3 3 3

3 3 3 3 3

4 3 3 3 3

Publicación traducida automáticamente

Artículo escrito por yippeee25 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 *