¿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!


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).


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.