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