Saltar al contenido

convertir varias columnas de formato de carácter a numérico en r

Solución:

Tu podrías intentar

DF <- data.frame("a" = as.character(0:5),
                 "b" = paste(0:5, ".1", sep = ""),
                 "c" = letters[1:6],
                 stringsAsFactors = FALSE)

# Check columns classes
sapply(DF, class)

#           a           b           c 
# "character" "character" "character" 

cols.num <- c("a","b")
DF[cols.num] <- sapply(DF[cols.num],as.numeric)
sapply(DF, class)

#          a           b           c 
#  "numeric"   "numeric" "character"

Si ya está usando tidyverse, hay algunas soluciones dependiendo de la situación exacta.

Básico si sabes que son todos números y no tiene NA

library(dplyr)

# solution
dataset %>% mutate_if(is.character,as.numeric)

Casos de prueba

df <- data.frame(
  x1 = c('1','2','3'),
  x2 = c('4','5','6'),
  x3 = c('1','a','x'), # vector with alpha characters
  x4 = c('1',NA,'6'), # numeric and NA
  x5 = c('1',NA,'x'), # alpha and NA
  stringsAsFactors = F)

# display starting structure
df %>% str()

Convierta todos los vectores de caracteres a numéricos (podría fallar si no son numéricos)

df %>%
  select(-x3) %>% # this removes the alpha column if all your character columns need converted to numeric
  mutate_if(is.character,as.numeric) %>%
  str()

Compruebe si se puede convertir cada columna. Esta puede ser una función anónima. Vuelve FALSE si hay un carácter no numérico o no NA en alguna parte. También comprueba si es un vector de caracteres para ignorar factores. na.omit elimina las NA originales antes de crear NA “malas”.

is_all_numeric <- function(x) {
  !any(is.na(suppressWarnings(as.numeric(na.omit(x))))) & is.character(x)
}
df %>% 
  mutate_if(is_all_numeric,as.numeric) %>%
  str()

Si desea convertir columnas con nombre específicas, mutate_at es mejor.

df %>% mutate_at('x1', as.numeric) %>% str()

Puede utilizar el índice de columnas:
data_set[,1:9] <- sapply(dataset[,1:9],as.character)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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