Masalah mengkonversi dari faktor ke variabel numerik dalam R [ditutup]

11

Saya ingin mengonversi variabel faktor menjadi yang numerik tetapi as.numerictidak memiliki efek yang saya harapkan.

Di bawah ini saya mendapatkan ringkasan statistik untuk versi numerik dari variabel berdasarkan pada variabel asli. Berarti terus menghitung dengan 1 ... mungkin (dia berspekulasi) tingkat faktor memiliki kedua nama dan angka, dan saya mengharapkan nilai variabel baru berasal dari nama ketika as.numericdirancang untuk menggunakan angka?

> describe.by(as.numeric(df$sch), df$sch)

group: 
  var    n mean sd median trimmed mad min max range skew kurtosis se
1   1 5389    1  0      1       1   0   1   1     0  NaN      NaN  0
--------------------------------------------------------- 
group: 001
  var  n mean sd median trimmed mad min max range skew kurtosis se
1   1 19    2  0      2       2   0   2   2     0  NaN      NaN  0
--------------------------------------------------------- 
group: 002
  var  n mean sd median trimmed mad min max range skew kurtosis se
1   1 54    3  0      3       3   0   3   3     0  NaN      NaN  0
--------------------------------------------------------- 
Michael Bishop
sumber
1
Saya menghapus tag baru yang Anda tambahkan; bagi saya mereka tampak terlalu umum dan tidak diskriminatif, atau dalam kasus as.factor terlalu sempit (karena ini merupakan fungsi dalam R base). Tolong ulang jika Anda merasa ada yang hilang.
JMS

Jawaban:

28

Itu benar: as.numeric(factor)mengembalikan angka yang diberikan R ke tingkat faktor itu. Kamu bisa mencobaas.numeric(as.character(factor))

Richard
sumber
4
Sebagai jawaban ini menunjukkan stackoverflow.com/a/3418192/476907 as.numeric(levels(f))[f] dianjurkan dan sedikit lebih efisien daripadaas.numeric(as.character(f))
discipulus
Terima kasih! Jawaban ini banyak membantu saya :)
Yasha
13

Ini adalah FAQ 7.10 dalam R Pertanyaan yang Sering Diajukan. Ya faktor disimpan sebagai bilangan bulat dari 1 ke jumlah level dan as.numeric memberikan kode yang mendasarinya. FAQ memberikan 2 cara untuk mengkonversi ke numerik.

Namun, biasanya ini karena ketika Anda membaca data di sana ada sesuatu tentang data Anda yang menyebabkan R memperlakukannya sebagai faktor, bukan angka (seringkali karakter non-numerik yang tersesat). Seringkali lebih baik untuk memperbaiki data mentah (konversi akan mengubah bagian non-numerik menjadi NA) atau menggunakan argumen colClasses jika menggunakan read.table atau yang serupa.

Greg Snow
sumber
1
values.tmp <- sapply (possibleValues, as.numeric); values.nonnumeric <- values.tmp [is.na (values.tmp)]
russellpierce