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 noNa
oNaN
(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));