leer - importar datos en r studio
Importación de archivos csv en R-valores numéricos leídos como caracteres (5)
Cualquier álgebra que esté haciendo en Excel para crear la nueva columna probablemente podría hacerse más efectivamente en R.
Intente lo siguiente: lea el archivo sin read.csv(... stringsAsFactors=FALSE)
antes de cualquier manipulación de Excel) en R usando read.csv(... stringsAsFactors=FALSE)
. [Si eso no funciona, eche un vistazo a ?read.table
(que read.csv
wraps), sin embargo, puede haber algún otro problema subyacente].
Por ejemplo:
delim = "," # or is it "/t" ?
dec = "." # or is it "," ?
myDataFrame <- read.csv("path/to/file.csv", header=TRUE, sep=delim, dec=dec, stringsAsFactors=FALSE)
Entonces, digamos que sus columnas numéricas son la columna 4
myDataFrame[, 4] <- as.numeric(myDataFrame[, 4]) # you can also refer to the column by "itsName"
Por último, si necesita ayuda para realizar en R las mismas tareas que ha realizado en Excel, aquí hay muchas personas que estarían encantados de ayudarle.
Soy consciente de que hay preguntas similares en este sitio, sin embargo, ninguna de ellas parece responder mi pregunta lo suficiente.
Esto es lo que he hecho hasta ahora:
Tengo un archivo csv que abro en Excel. Manipulo las columnas algebraicamente para obtener una nueva columna "A". read.csv()
el archivo a R usando read.csv()
y las entradas en la columna A se almacenan como factores; quiero que se almacenen como numéricos. Encuentro esta pregunta sobre el tema:
Importó un conjunto de datos csv a R pero los valores se convierten en factores
Siguiendo el consejo, stringsAsFactors = FALSE
como un argumento en read.csv()
, sin embargo, como sugirió Hong Ooi en la página vinculada anteriormente, esto no hace que las entradas en la columna A se almacenen como valores numéricos.
Una posible solución es utilizar los consejos que se dan en la siguiente página:
¿Cómo convertir un factor en un entero / numérico sin pérdida de información?
sin embargo, me gustaría una solución más limpia, es decir, una forma de importar el archivo para que las entradas de las columnas se almacenen como valores numéricos.
Saludos por cualquier ayuda!
En read.table
(y sus parientes) es el argumento na.strings
que especifica qué cadenas deben interpretarse como valores faltantes NA
. El valor predeterminado es na.strings = "NA"
Si los valores faltantes en una columna de otra variable numérica se codifican como algo distinto de " NA
", por ejemplo, " .
" O " N/A
", estas filas se interpretarán como un character
, y luego toda la columna se convertirá en un character
.
Por lo tanto, si sus valores faltantes son más que " NA
", debe especificarlos en na.strings
.
Incluyendo esto en el comando read.csv
funcionó para mí: strip.white = TRUE
(Encontré esta solución here .)
Si está tratando con conjuntos de datos grandes (es decir, conjuntos de datos con un alto número de columnas), la solución mencionada anteriormente puede ser complicada manualmente y requiere que sepa qué columnas son numéricas a priori .
Intenta esto en su lugar.
char_data <- read.csv(input_filename, stringsAsFactors = F)
num_data <- data.frame(data.matrix(char_data))
numeric_columns <- sapply(num_data,function(x){mean(as.numeric(is.na(x)))<0.5})
final_data <- data.frame(num_data[,numeric_columns], char_data[,!numeric_columns])
El código hace lo siguiente:
- Importa tus datos como columnas de caracteres.
- Crea una instancia de sus datos como columnas numéricas.
- Identifica qué columnas de sus datos son numéricas (asumiendo que las columnas con menos del 50% de NA al convertir sus datos a números son de hecho numéricas).
- Fusionar las columnas numéricas y de caracteres en un conjunto de datos final.
Básicamente, esto automatiza la importación de su archivo .csv al preservar los tipos de datos de las columnas originales (como caracteres y números).
Versión para data.table basada en el código de dmanuge:
convNumValues<-function(ds){
ds<-data.table(ds)
dsnum<-data.table(data.matrix(ds))
num_cols <- sapply(dsnum,function(x){mean(as.numeric(is.na(x)))<0.5})
nds <- data.table( dsnum[, .SD, .SDcols=attributes(num_cols)$names[which(num_cols)]]
,ds[, .SD, .SDcols=attributes(num_cols)$names[which(!num_cols)]] )
return(nds)
}