¿Cómo convertir la columna DataFrame de carácter a numérico en R?

En este artículo, discutiremos cómo convertir la columna DataFrame de carácter a numérico en el lenguaje de programación R.

Toda columna de marco de datos está asociada con una clase que es un indicador del tipo de datos al que pertenecen los elementos de esa columna. Por lo tanto, para simular la conversión del tipo de datos, los elementos de datos deben convertirse al tipo de datos deseado en este caso, es decir, todos los elementos de esa columna deben ser elegibles para convertirse en valores numéricos.

Nota: el método sapply() se puede utilizar para recuperar el tipo de datos de las variables de columna en forma de vector. 

Método 1: Usar el método transform()

Las columnas de tipo de carácter, ya sean caracteres individuales o strings, se pueden convertir en valores numéricos solo si estas conversiones son posibles. De lo contrario, los datos se pierden y el compilador los convierte en valores faltantes o NA al momento de la ejecución.

Este enfoque representa la pérdida de datos debido a la inserción de valores faltantes o NA en lugar de caracteres. Estos valores NA se introducen ya que la interconversión no es posible directamente.

R

# declare a dataframe
# different data type have been 
# indicated for different cols
data_frame <- data.frame(
               col1 = as.character(6 : 9),
               col2 = factor(4 : 7),
               col3 = letters[2 : 5],
               col4 = 97 : 100, stringsAsFactors = FALSE)
  
print("Original DataFrame")
print (data_frame)
  
# indicating the data type of 
# each variable
sapply(data_frame, class)
  
# converting character type 
# column to numeric
data_frame_col1 <- transform(data_frame,
                             col1 = as.numeric(col1))
print("Modified col1 DataFrame")
print (data_frame_col1)
  
# indicating the data type of 
# each variable
sapply(data_frame_col1, class)
  
# converting character type column
# to numeric
data_frame_col3 <- transform(data_frame, 
                             col3 = as.numeric(col3))
print("Modified col3 DataFrame")
print (data_frame_col3)
  
# indicating the data type of each
# variable
sapply(data_frame_col3, class)

Producción:

Explicación : con el método sapply(), la clase de col3 del marco de datos es un carácter, es decir, consta de valores de carácter de un solo byte, pero en la aplicación del método transform(), estos valores de carácter se convierten en faltantes o Valores NA, porque el carácter no se puede convertir directamente en datos numéricos. Entonces, esto conduce a la pérdida de datos.

La conversión se puede realizar sin usar stringAsFactors=FALSE y luego convertir implícitamente el carácter a factor usando as.factor() y luego a tipo de datos numérico usando as.numeric(). La información sobre las strings reales se pierde por completo incluso en este caso. Sin embargo, los datos se vuelven ambiguos y pueden conducir a la pérdida real de datos. A los datos simplemente se les asignan valores numéricos basados ​​en el resultado de la clasificación lexicográfica de los valores de la columna.

R

# declare a dataframe
# different data type have been 
# indicated for different cols
data_frame <- data.frame(
               col1 = as.character(6 : 9),
               col2 = factor(4 : 7),
               col3 = c("Geeks", "For", "Geeks", "Gooks"),
               col4 = 97 : 100)
print("Original DataFrame")
print (data_frame)
  
# indicating the data type of
# each variable
sapply(data_frame, class)
  
# converting character type column 
# to numeric
data_frame_col3 <- transform(data_frame,
                             col3 = as.numeric(as.factor(col3)))
print("Modified col3 DataFrame")
print (data_frame_col3)
  
# indicating the data type of each
# variable
sapply(data_frame_col3, class)

Producción:

[1] "Original DataFrame"
col1 col2  col3 col4
1    6    4 Geeks   97
2    7    5   For   98
3    8    6 Geeks   99
4    9    7 Gooks  100
   col1      col2      col3      col4
"factor"  "factor"  "factor" "integer"
[1] "Modified col3 DataFrame"
col1 col2 col3 col4
1    6    4    2   97
2    7    5    1   98
3    8    6    2   99
4    9    7    3  100
   col1      col2      col3      col4
"factor"  "factor" "numeric" "integer"

Explicación : la primera y la tercera string en col3 son iguales, por lo tanto, se les asigna el mismo valor numérico. Y en total, los valores se ordenan en orden ascendente y luego se les asignan los valores enteros correspondientes. «For» es la string más pequeña que aparece en orden lexicográfico, por lo tanto, se le asigna un valor numérico de 1, luego «Geeks», ambas instancias se asignan a 2 y «Gooks» se le asigna un valor numérico de 3. Por lo tanto, el tipo col3 cambia a numérico.

Método 2: Usar el método apply()

El método apply() en R permite la aplicación de una función en varias columnas juntas. La función puede ser definida por el usuario o incorporada, según la necesidad del usuario.

Sintaxis: apply ( df , eje , FUN)

Argumentos: 

  • df: el marco de datos para aplicar la función en
  • eje: el eje sobre el que se aplica la función
  • FUN- Método definido por el usuario para aplicar

Ejemplo:

R

# declare a dataframe
# different data type have been 
# indicated for different cols
data_frame <- data.frame(
               col1 = as.character(6:9),
               col2 = as.character(4:7),
               col3 = c("Geeks","For","Geeks","Gooks"),
               col4 = letters[1:4])
  
print("Original DataFrame")
print (data_frame)
  
# indicating the data type of each
# variable
sapply(data_frame, class)
  
# defining the vector of columns to 
# convert to numeric
vec <- c(1,2)
  
# apply the conversion on columns
data_frame[ , vec] <- apply(data_frame[ , vec,drop=F], 2,           
                    function(x) as.numeric(as.character(x)))
print("Modified DataFrame")
print (data_frame)
  
# indicating the data type of each variable
sapply(data_frame, class)

Producción:

[1] "Original DataFrame"
 col1 col2  col3 col4
1    6    4 Geeks    a
2    7    5   For    b
3    8    6 Geeks    c
4    9    7 Gooks    d
   col1     col2     col3     col4
"factor" "factor" "factor" "factor"
[1] "Modified DataFrame"
 col1 col2  col3 col4
1    6    4 Geeks    a
2    7    5   For    b
3    8    6 Geeks    c
4    9    7 Gooks    d
    col1      col2      col3      col4
"numeric" "numeric"  "factor"  "factor" 

Explicación : los tipos col1 y col2 se convierten en numéricos. Sin embargo, este método es aplicable a datos numéricos puros convertidos a caracteres. Lanza un error «NA introducidos por coerción» al ejecutarse para col3 y col4.

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 *