Est-il possible de lire directement les colonnes CSV en tant que données catégorielles?

10

J'ai besoin d'analyser avec R les données d'une enquête médicale (avec plus de 100 colonnes codées) qui vient dans un CSV. Je vais utiliser le hochet pour une première analyse mais en coulisses c'est toujours R.

Si je lis.csv () le fichier, les colonnes avec des codes numériques sont traitées comme des données numériques. Je suis conscient que je pourrais créer des colonnes catégorielles à partir d'eux avec factor (), mais le faire pour plus de 100 colonnes est pénible.

J'espère qu'il existe une meilleure façon de dire à R d'importer les colonnes directement en tant que facteurs. Ou au moins pour les convertir en place par la suite.

Je vous remercie!

wishihadabettername
la source
3
Nous sommes heureux de répondre aux questions de R ici. Voir meta.stats.stackexchange.com/questions/252/…
Rob Hyndman

Réponses:

15

Vous pouvez utiliser l' colClassesargument pour spécifier les classes de vos colonnes de données. Par exemple:

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

affectera un chiffre à la première colonne, un facteur aux deuxième et troisième. Étant donné que vous avez autant de colonnes, un raccourci peut être:

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

ou une telle variation (c.-à-d. attribuer un chiffre à la première colonne, un facteur aux 37 colonnes suivantes, puis un caractère à la dernière).

ars
la source
Cela peut également être utile si vous souhaitez spécifier des classes par nom de variable (par exemple, pour attribuer une classe à une seule variable): stackoverflow.com/a/8185739/1169233
Waldir Leoncio
3

ou faites-le simplement après avoir lu les données

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

bien que ce type de Q soit probablement plus adapté à Stack Overflow .

modifier : voir ci-dessous.

apeescape
la source
1
Voir meta.stats.stackexchange.com/questions/252/… le consensus actuel est que c'est une question appropriée, si vous n'êtes pas d'accord avec la méta, ne tourmentez pas le nouveau demandeur de questions.
russellpierce
1
ok, mais vous aurez probablement un plus grand public pour obtenir des réponses à une question R pure (au moins pour l'instant) - d'où le "probablement". "tourment" est un mot fort hein? :)
apeescape
1
Bien sûr, le tourment est un peu fort; Je suis désolé à ce sujet. J'étais / suis juste frustré par les utilisateurs récidivistes (dont vous n'êtes pas un) qui persistent à rediriger les demandeurs de questions vers StackOverflow sans avoir fait de commentaire sur la méta (où le consensus semble assez clair).
russellpierce
Cela peut entraîner des problèmes lorsque vous avez des colonnes avec des nombres remplis de 0, un mélange de nombres et de valeurs manquantes, ou que vous n'avez que des valeurs de 'T'et 'F'(est converti en logique).
Max Candocia