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