¿Es posible leer directamente columnas CSV como datos categóricos?

10

Necesito analizar con R los datos de una encuesta médica (con más de 100 columnas codificadas) que viene en un CSV. Voy a utilizar sonajero para algunos análisis inicial pero detrás de las escenas es todavía R.

Si leo el archivo .csv () , las columnas con códigos numéricos se tratan como datos numéricos. Soy consciente de que podría crear columnas categóricas a partir de ellas con factor (), pero hacerlo por más de 100 columnas es una molestia.

Espero que haya una mejor manera de decirle a R que importe las columnas directamente como factores. O al menos para convertirlos en su lugar después.

¡Gracias!

wishihadabettername
fuente
3
Estamos felices de responder preguntas R aquí. Ver meta.stats.stackexchange.com/questions/252/…
Rob Hyndman

Respuestas:

15

Puede usar el colClassesargumento para especificar las clases de sus columnas de datos. Por ejemplo:

data <- read.csv('foo.csv', colClasses=c('numeric', 'factor', 'factor'))

asignará numérico a la primera columna, factorizará a la segunda y tercera. Como tiene tantas columnas, un atajo podría ser:

data <- read.csv('foo.csv', colClasses=c('numeric', rep('factor', 37), 'character'))

o alguna de esas variaciones (es decir, asignar números a la primera columna, factorizar a las siguientes 37 columnas, luego caracteres a la última).

ars
fuente
Esto también puede ser útil, si desea especificar clases por nombre de variable (por ejemplo, para asignar clases a una sola variable): stackoverflow.com/a/8185739/1169233
Waldir Leoncio
3

o simplemente hazlo después de leer los datos

dat <- read.csv("kdfjdkf")
apply(dat, 2, factor)

aunque este tipo de Q probablemente sea más adecuado para Stack Overflow .

editar : ver abajo.

El escape de los monos
fuente
1
Vea meta.stats.stackexchange.com/questions/252/…. El consenso actual es que esta es una pregunta apropiada, si no está de acuerdo con el chime en meta, no atormente al nuevo interlocutor.
russellpierce
1
ok, pero probablemente tendrás una audiencia más grande para obtener respuestas para una pregunta R pura (al menos por ahora) - por lo tanto, el "probablemente". "tormento" es una palabra fuerte ¿eh? :)
apeescape
1
Claro, el tormento es un poco fuerte; Lamento eso. Estaba / estoy frustrado con los usuarios infractores reincidentes (de los cuales usted no es uno) que persisten en redirigir a los que hacen preguntas a StackOverflow sin haber hecho ningún comentario sobre el meta (donde el consenso parece bastante claro).
russellpierce
Esto puede generar problemas en los que tiene columnas con números rellenados con 0, una mezcla de números y valores faltantes, o solo tiene valores de 'T'y 'F'(se convierte en lógico).
Max Candocia