Apakah mungkin untuk langsung membaca kolom CSV sebagai data kategorikal?

10

Saya perlu menganalisis dengan R data dari survei medis (dengan 100+ kolom kode) yang tersedia dalam CSV. Saya akan menggunakan rattle untuk analisis awal tetapi di balik layar masih R.

Jika saya membaca.csv () file, kolom dengan kode numerik diperlakukan sebagai data numerik. Saya sadar saya bisa membuat kolom kategorikal dari mereka dengan faktor () tetapi melakukannya untuk 100+ kolom itu menyebalkan.

Saya harap ada cara yang lebih baik untuk memberitahu R untuk mengimpor kolom secara langsung sebagai faktor. Atau setidaknya untuk mengubahnya di tempat sesudahnya.

Terima kasih!

wishihadabettername
sumber
3
Kami senang mengambil pertanyaan R di sini. Lihat meta.stats.stackexchange.com/questions/252/…
Rob Hyndman

Jawaban:

15

Anda bisa menggunakan colClassesargumen untuk menentukan kelas kolom data Anda. Sebagai contoh:

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

akan menetapkan angka ke kolom pertama, faktor ke kolom kedua dan ketiga. Karena Anda memiliki begitu banyak kolom, pintasan mungkin:

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

atau beberapa variasi semacam itu (yaitu menetapkan numerik ke kolom pertama, faktor ke 37 kolom berikutnya, lalu karakter ke yang terakhir).

ars
sumber
Ini mungkin juga berguna, jika Anda ingin menentukan kelas berdasarkan nama variabel (mis., Untuk menetapkan kelas hanya satu variabel): stackoverflow.com/a/8185739/1169233
Waldir Leoncio
3

atau lakukan saja setelah Anda membaca data

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

meskipun jenis Q ini mungkin lebih cocok untuk Stack Overflow .

sunting : lihat di bawah.

apeescape
sumber
1
Lihat meta.stats.stackexchange.com/questions/252/... konsensus saat ini adalah bahwa ini adalah pertanyaan yang sesuai, jika Anda tidak setuju dengan loncatan meta, jangan menyiksa penanya pertanyaan baru.
russellpierce
1
ok, tetapi Anda mungkin akan memiliki audiens yang lebih besar untuk mendapatkan tanggapan atas pertanyaan R murni (setidaknya untuk sekarang) - karenanya, "mungkin". "Siksaan" adalah kata yang kuat, eh? :)
apeescape
1
Tentu, siksaan agak kuat; Saya minta maaf atas hal tersebut. Saya hanya frustrasi dengan pengguna pelaku berulang (yang bukan Anda) yang terus mengarahkan penanya pertanyaan ke StackOverflow tanpa membuat komentar tentang meta (di mana konsensus tampaknya cukup jelas).
russellpierce
Ini dapat menyebabkan masalah di mana Anda memiliki kolom dengan angka 0-padded, campuran angka dan nilai yang hilang, atau hanya memiliki nilai 'T'dan 'F'(dikonversi menjadi logis).
Max Candocia