variable valores una studio reemplazar numericas numerica matrices factor eliminar convertir columna categoricas cambiar r

una - Cambio de valores al convertir el tipo de columna a numérico



matrices en r studio (4)

Tengo un archivo de datos con el formato de arriba.
Lo cargué en R e intenté trazar un histograma con los valores de la columna dist y obtuve el error "x debe ser numérico". Por lo tanto, intenté cambiar el formato.

> head(data) V1 V2 1 type gene_dist 2 A 64667 3 A 76486 4 A 97416 5 A 30876 6 A 88018 > summary(data) V1 V2 A : 67 100 : 1 B :122 100906 : 1 type: 1 102349 : 1 1033 : 1 10544 : 1 10745 : 1 (Other):184

Intenté establecer el formato para la columna usando sapply pero los valores se modifican:

> data[,2]<-sapply(data[,2],as.numeric) > head(data) V1 V2 1 type 190 2 A 146 3 A 166 4 A 189 summary(data) V1 V2 A : 67 Min. : 1.00 B :122 1st Qu.: 48.25 type: 1 Median : 95.50 Mean : 95.50 3rd Qu.:142.75 Max. :190.00

¿Alguien sabe por qué está sucediendo esto?


Parece que tu segunda columna es un factor. as.character utilizar as.character antes que as.numeric . Esto se debe a que los factores se almacenan internamente como enteros con una tabla para dar las etiquetas de nivel de factor. Solo utilizando as.numeric solo dará los códigos de enteros internos. No es necesario utilizar sapply ya que estas funciones están vectorizadas.

data[,2] <- as.numeric(as.character(data[,2]))

Es probable que la columna sea un factor porque hay algunos caracteres no numéricos en algunas de las entradas. Cualquiera de estas entradas se convertirá a NA con la advertencia correspondiente, pero es posible que desee investigar esto en sus datos sin procesar.

Como nota al margen, los data son una opción pobre (aunque no inválida) para un nombre de variable ya que hay una función base del mismo nombre.


Probablemente sea mucho mejor arreglarlo al leer el archivo que usando as.numeric () o as.character (). Al leer su archivo, asegúrese de tener

  • header=TRUE si la primera fila es header
  • NA y no Na o NaN (ctrl + H y reemplace por NA en su archivo de datos)
  • no hay otras cadenas de caracteres en sus columnas numéricas

Entonces R los considerará automáticamente como numéricos.


Tuve el mismo problema, pero como lo encontré, la causa principal era diferente, por lo que comparto esto como una respuesta pero no como un comentario.

df <- read.table(doc.csv, header = TRUE, sep = ",", dec = ".") df$value # Results in [1] 2254 1873 2201 2147 2456 1785 # So.. as.numeric(df$value) [1] 26 14 22 20 32 11

En mi caso, la razón fue que había espacios con los valores en el documento csv original. Eliminando los espacios arreglados el problema.

Desde el dput (df)

" 1178 ", " 1222 ", " 1223 ", " 1314 ", " 1462 ",


Tuve este mismo problema para una matriz que contiene valores de ''lista'', cuando se leía un data objeto desde read.csv. as.character() no funciona aquí, y as.numeric() y data.matrix() cambiaron los valores en la matriz. En su lugar necesitas usar lo siguiente:

matrix_numeric[1:m,1:n] <- as.numeric(as.matrix(data[1:m,1:n]))

Primero convirtiendo a un personaje luego a un doble. Para datos de dimensiones matriciales [m, n]. (debe crear el objeto matrix_numeric primero antes de asignar valores ... matrix_numeric <- matrix(0,m,n) )

Para un vector vec1 en formato de lista, uso lo siguiente:

out1 <- as.numeric(unlist(vec1));