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)