Konversi Faktor ke Numerik dan Numerik ke Faktor dalam Pemrograman R

Mengubah Faktor menjadi Nilai Numerik

Terkadang Anda perlu mengubah faktor secara eksplisit menjadi angka atau teks. Untuk mencapai ini, kita harus menggunakan fungsi as.character() atau as.numeric().

Langkah 1: Konversi vektor data menjadi faktor. Perintah factor() digunakan untuk membuat dan memodifikasi faktor di R.

Langkah 2: Faktor diubah menjadi vektor numerik menggunakan as.numeric() . Ketika sebuah faktor diubah menjadi vektor numerik, kode numerik yang sesuai dengan level faktor akan dikembalikan.

Contoh: Ambil vektor data ‘V’ yang terdiri dari arah dan faktornya akan diubah menjadi numerik. 

# Data Vector 'V'
V = c("North", "South", "East", "East")

# Convert vector 'V' into a factor
drn <- factor(V)

# Converting a factor into a numeric vector
as.numeric(drn)
## [1] 2 3 1 1

Mengonversi Faktor yang merupakan Angka: Jika faktornya adalah angka, pertama-tama ubahlah menjadi vektor karakter, lalu menjadi numerik. Jika suatu faktor adalah karakter maka Anda tidak perlu mengubahnya menjadi karakter. Dan jika Anda mencoba mengonversi karakter alfabet menjadi numerik, itu akan mengembalikan NA. Contoh: Misalkan kita mengambil harga sabun dari berbagai merek yang merupakan angka dengan nilai s(30, 99, 212, 280, 219). 

# Creating a Factor
soap_cost <- factor(c(30, 99, 212, 280, 219))

# Converting Factor to numeric
as.numeric(as.character(soap_cost))
## [1]  30  99 212 280 219

Namun, jika Anda hanya menggunakan as. numeric(), outputnya adalah vektor representasi level internal dari faktor dan bukan nilai aslinya. 

# Creating a Factor
soap_cost <- factor(c(30, 99, 212, 280, 219))

# Converting Factor to Numeric
as.numeric(soap_cost)
## [1] 1 2 3 5 4

Mengubah nilai Numerik menjadi Faktor

Untuk mengubah angka menjadi faktor, kami menggunakan fungsi cut() . cut() membagi rentang vektor numerik (asumsikan x) yang akan dikonversi dengan memotong interval dan mengkodekan nilainya (x) sesuai dengan interval mana mereka jatuh. Tingkat satu sesuai dengan paling kiri, tingkat dua sesuai dengan paling kiri berikutnya, dan seterusnya.

Sintaks: cut.default(x, break, labels = NULL, include.lowest = FALSE, right = TRUE, dig.lab = 3)
  • Saat angka diberikan melalui argumen ‘break=’, faktor keluaran dibuat dengan membagi rentang variabel ke dalam jumlah interval yang panjangnya sama.

  • Dalam sintaks include.lowest menunjukkan apakah ‘x[i]’ yang sama dengan nilai break terendah (untuk kanan= BENAR) harus disertakan. Dan ‘kanan’ dalam sintaks menunjukkan apakah interval harus dibuka di sebelah kiri dan ditutup di sebelah kanan atau sebaliknya.

  • Jika label tidak disediakan maka dig.lab digunakan. Jumlah digit yang digunakan dalam memformat angka istirahat ditentukan melaluinya.

Contoh 1: Mari kita asumsikan kumpulan data karyawan usia, gaji, dan jenis kelamin. Untuk membuat faktor yang sesuai dengan usia dengan tiga level yang berjarak sama, kita dapat menulis dalam R sebagai berikut: 

# Creating vectors
age <- c(40, 49, 48, 40, 67, 52, 53)
salary <- c(103200, 106200, 150200, 10606, 10390, 14070, 10220)
gender <- c("male", "male", "transgender",
            "female", "male", "female", "transgender")

# Creating data frame named employee
employee<- data.frame(age, salary, gender)

# Creating a factor corresponding to age
# with three equally spaced levels
wfact = cut(employee$age, 3)
table(wfact)
## wfact
## (40,49] (49,58] (58,67] 
##       4       2       1

Contoh 2: Kami sekarang akan memberi label- muda, sedang dan tua. 

# Creating vectors
age <- c(40, 49, 48, 40, 67, 52, 53)
salary <- c(103200, 106200, 150200, 10606, 10390, 14070, 10220)
gender <- c("male", "male", "transgender",
            "female", "male", "female", "transgender")

# Creating data frame named employee
employee<- data.frame(age, salary, gender)

# Creating a factor corresponding to age with labels
wfact = cut(employee$age, 3, labels=c('Young', 'Medium', 'Aged'))
table(wfact)
## wfact
##  Young Medium   Aged 
##      4      2      1

Contoh berikutnya akan menggunakan ’ norm() ’ untuk menghasilkan varian acak terdistribusi normal multivariat dalam ruang yang ditentukan. Ada tiga argumen yang diberikan kepada rnorm():

  • n: Jumlah variabel acak perlu dihasilkan

  • berarti: Nilainya adalah 0 secara default jika tidak disebutkan

  • sd: nilai standar deviasi perlu disebutkan selain itu adalah 1 secara default

norma(n, rata-rata, sd)
# Generating a vector with random numbers
y <- rnorm(100)

# the output factor is created by the division
# of the range of variables into pi/3*(-3:3)
# 4 equal-length intervals
table(cut(y, breaks = pi/3*(-3:3)))
## 
## (-3.14,-2.09] (-2.09,-1.05]     (-1.05,0]      (0,1.05]   (1.05,2.09] 
##             1            13            35            37            12 
##   (2.09,3.14] 
##             2

Faktor output dibuat dengan membagi rentang variabel menjadi 5 interval dengan panjang yang sama melalui argumen break. 

age <- c(40, 49, 48, 40, 67, 52, 53)
gender <- c("male", "male", "transgender", "female", "male", "female", "transgender")

# Data frame generated from the above vectors
employee<- data.frame(age, gender)

# the output factor is created by the division
# of the range of variables into 5 equal-length intervals
wfact = cut(employee$age, breaks=5)
table(wfact)
## wfact
##   (40,45.4] (45.4,50.8] (50.8,56.2] (56.2,61.6]   (61.6,67] 
##           2           2           2           0           1
y <- rnorm(100)
table(cut(y, breaks = pi/3*(-3:3), dig.lab=5))
## 
## (-3.1416,-2.0944] (-2.0944,-1.0472]       (-1.0472,0]        (0,1.0472] 
##                 3                12                29                37 
##   (1.0472,2.0944]   (2.0944,3.1416] 
##                18                 1