Lebih
Cara mengkonversi faktor bilangan bulat\numerik tanpa kehilangan informasi?
Ketika saya mengubah faktor numerik atau integer, saya mendapatkan tingkat dasar kode, bukan nilai-nilai dalam angka.
f <- factor(sample(runif(5), 20, replace = TRUE))
## [1] 0.0248644019011408 0.0248644019011408 0.179684827337041
## [4] 0.0284090070053935 0.363644931698218 0.363644931698218
## [7] 0.179684827337041 0.249704354675487 0.249704354675487
## [10] 0.0248644019011408 0.249704354675487 0.0284090070053935
## [13] 0.179684827337041 0.0248644019011408 0.179684827337041
## [16] 0.363644931698218 0.249704354675487 0.363644931698218
## [19] 0.179684827337041 0.0284090070053935
## 5 Levels: 0.0248644019011408 0.0284090070053935 ... 0.363644931698218
as.numeric(f)
## [1] 1 1 3 2 5 5 3 4 4 1 4 2 3 1 3 5 4 5 3 2
as.integer(f)
## [1] 1 1 3 2 5 5 3 4 4 1 4 2 3 1 3 5 4 5 3 2
Aku harus resor untuk paste
untuk mendapatkan nilai-nilai yang nyata:
as.numeric(paste(f))
## [1] 0.02486440 0.02486440 0.17968483 0.02840901 0.36364493 0.36364493
## [7] 0.17968483 0.24970435 0.24970435 0.02486440 0.24970435 0.02840901
## [13] 0.17968483 0.02486440 0.17968483 0.36364493 0.24970435 0.36364493
## [19] 0.17968483 0.02840901
Apakah ada cara yang lebih baik untuk mengkonversi faktor numerik?
559
7
Lihat bagian Peringatan dari
?faktor
:FAQ di R memiliki saran yang sama.
Mengapa
sebagai.numerik(tingkat(f))[f]
lebih efisien dari.numerik(seperti.karakter(f))
?sebagai.numerik(seperti.karakter(f))
lebih efektifsebagai.numerik(tingkat(f)[f])
, sehingga anda melakukan konversi numerik pada panjang(x)
nilai-nilai, bukan padanlevels(x)
nilai-nilai. Perbedaan kecepatan akan menjadi yang paling jelas untuk panjang vektor dengan beberapa tingkat. Jika nilai-nilai sebagian besar adalah unik, tidak ada't akan banyak perbedaan dalam kecepatan. Namun anda melakukan konversi, operasi ini mungkin menjadi hambatan dalam kode anda, jadi don't khawatir terlalu banyak tentang hal itu.Beberapa timing
R memiliki jumlah (undocumented) kenyamanan fungsi untuk mengkonversi faktor-faktor:
as.karakter.faktor
as.data.frame.faktor
as.Tanggal.faktor
as.daftar.faktor
as.vektor.faktor
Tapi mengganggu, tidak ada yang lebih untuk menangani faktor -> numerik konversi. Sebagai perpanjangan dari Joshua Ulrich's jawaban, saya akan menyarankan untuk mengatasi kelalaian ini dengan definisi anda sendiri idiomatik fungsi:
Cara yang paling mudah adalah dengan menggunakan
unfactor
fungsi dari paket varhandleContoh ini dapat menjadi awal yang cepat:
Catatan: ini jawaban tertentu yang tidak untuk mengkonversi angka-dihargai faktor numerik, itu adalah untuk mengkonversi kategoris faktor untuk mereka sesuai tingkat angka.
Setiap jawaban dalam posting ini gagal untuk menghasilkan hasil bagi saya , NAs mendapatkan dihasilkan.
Hal ini dimungkinkan hanya dalam kasus ketika faktor label sesuai dengan nilai-nilai asli. Saya akan menjelaskannya dengan contoh.
Asumsikan data vektor
x
:Anda dapat menggunakan
hablar::mengkonversi
jika anda memiliki data frame. Sintaks adalah mudah:Contoh df
terlambat untuk permainan, secara tidak sengaja, saya menemukan
trimws()
dapat mengkonversifaktor(3:5)
untukc("3","4","5")
. Kemudian anda dapat menyebutsebagai.numerik()
. Yaitu: