Statistika dengan R : Percabangan dan Perulangan
Sebagai bahasa pemrograman, R memiliki kemampuan untuk melakukan percabangan dan perulangan.
Percabangan
Sintaks untuk melakukan percabangan:
```
if(expression1){
statement
} else if(expression2){
statement
}
… else{
statement
}
```
Ekspression yang ada di dalam if adalah logical expression. Ingat lagi mengenai logical expression pada pembelajaran sebelumnya. Operator yang dapat digunakan untuk melakukan perbandingan adalah `<, <=, >=, >, ==, !=` dan operator logika adalah `&, | , ! `
Contoh:
```{r contoh percabangan}
Stars <- 5
if(Stars < 4){
print("biasa saja")
}else{
print("sangat baik")
}
```
Percabangan di atas akan menampilkan biasa saja jika Stars < 4. Jika tidak terjadi mana akan ditampilkan sangat baik. Karena hanya terdiri dari if-else, maka hanya ada 2 kondisi yang menentukan. Jika ingin ada lebih dari 2 kondisi, dapat menggunakan perintah `else if`.
Lengkapi percabangan untuk memberikan predikat untuk sebuah rating yang dinyatakan dalam variabel Stars dengan ketentuan:
- Rating ≤1 → predikat: sangat buruk
- Rating >1 dan ≤2 → predikat: buruk
- Rating >2 dan ≤3 → predikat: sedang
- Rating >3 dan ≤4 → predikat: baik
- Rating >4 → predikat: sangat baik
```{r}
Stars <- 4
if(Stars <= 1){
predikat <- "sangat buruk"
} else if(Stars > 1 & Stars <= 2){
predikat <- "Buruk"
} else if (Stars > 2 & Stars <= 3){
predikat <- "Sedang"
} else if (Stars > 3 & Stars <= 4){
predikat <- "Baik"
} else {
predikat <- "Sangat Baik"
}
predikat
```
Perulangan
Terdapat beberapa cara untuk melakukan perulangan di R.Sintaks untuk melakukan perulangan dengan `for` adalah:
```
for (val in sequence){
statement
}
```
dan
```
while (expression){
statement
}
```
Contoh 1: Misalkan vektor1 = (1,3,4,6). Untuk elemen vektor1 yang lebih kecil dari 5, ubahlah menjadi 5
```{r Contoh 1 perulangan}
vektor1 <- c(1,3,4,6)
for(i in c(1:length(vektor1))){
if(vektor1[i] < 5){
vektor1[i] <- 5
print(vektor1[i])
}
}
```
Contoh 2: Buatlah sebuah variabel x yang berisi 10. Selama x lebih besar dari 1, tampilkan x dan ubahlah x menjadi x/2.
```{r Contoh 2 Perulangan}
x <- 10
while(x > 1){
print(x)
x <- x/2
}
```
Bacalah dataset ramen.ratings yang telah digunakan. Tambahkan kolom baru di ramen.ratings dan beri nama predikat. Isi Kolom ini dengan predikat dari masing-masing ramen dengan ketentuan:
- Rating ≤1 → predikat: sangat buruk
- Rating >1 dan ≤2 → predikat: buruk
- Rating >2 dan ≤3 → predikat: sedang
- Rating >3 dan ≤4 → predikat: baik
- Rating >4 → predikat: sangat baik
Note: rating ramen dinyatakan oleh Stars. Jika Anda melihat tipe data dari masing-masing variabel di ramen.rating, maka Anda akan menemukan bahwa Stars memiliki tipe factor. Untuk mengubah ke numeric. Anda harus mengubahnya terlebih dahulu menjadi character (dengan as.character()) dan kemudian mengubah menjadi numeric (dengan as.numeric()).
```{r}
append_predikat <- function(Stars){
predikat <- ""
if(Stars <= 1){
predikat <- "Sangat buruk"
} else if(Stars > 1 & Stars <= 2){
predikat <- "Buruk"
} else if (Stars > 2 & Stars <= 3){
predikat <- "Sedang"
} else if (Stars > 3 & Stars <= 4){
predikat <- "Baik"
} else if (Stars == "Unrated"){
predikat <- "NULL"
} else {
predikat <- "Sangat Baik"
}
return(predikat)
}
Predikat <- c(1:length(ramen.ratings$Stars))
i <- 1
while (i <= length(Predikat)) {
Predikat[i] <- append_predikat(ramen.ratings$Stars[i])
i <- i+1
}
ramen.ratings$Predikat <- Predikat
ramen.ratings
```
Dplyr
Salah satu library yang banyak digunakan di R adalah dplyr. Install library ini jika belum pernah sebelumnya. Panggil library tersebut untuk menggunakannya. Library ini memiliki fungsi untuk melakukan manipulasi data sederhana.
```{r}
library(dplyr)
```
Beberapa fungsi yang tersedia di dalamnya:
Fungsi | Kegunaan
-------|---------
`filter()`| memilih baris
`select()`| memilih kolom
`summarise()` dan `group_by()` | meringkas beberapa nilai di dalam satu grup menjadi sebuah nilai baru
`filter()`
fungsi `filter()` digunakan untuk memilih baris-baris yang sesuai dengan filternya. Sintaks:
```
filter(<data frame>, <filter>)
```
Hasil dari `filter()` adalah data frame baru yang baris-barisnya sudah ter-filter.
Contoh 1: Ingin mendapatkan baris-baris dari ramen.ratings yang Style-nya adalah "Cup"
```{r Contoh 1 filter, error=TRUE}
filter(ramen.ratings, Style=="Cup")
```
Contoh 2: Ingin mendapatkan baris-baris dari ramen.ratings yang Style-nya adalah “Cup” dan Stars-nya besar dari 4
```{r Contoh 2 filter, error=TRUE}
filter(ramen.ratings, Style=="Cup" & Stars > 4)
```
Contoh 3:
Ingin mendapatkan baris-baris dari ramen.ratings yang memiliki rating ( Stars tidak kosong )
```{r Contoh 3 filter, error=TRUE}
filter(ramen.ratings, !is.na(Stars))
```
Buatlah data frame baru bernama `Japan_cb` yang merupakan baris-baris dari ramen.ratings yang berasal dari negara Japan dan memiliki kemasan cup atau bowl.
```{r}
japan_cb <- data.frame(filter(ramen.ratings,( Style=="Cup" | Style=="Bowl") & Country=="Japan"))
japan_cb
```
`select()`
fungsi `select()` digunakan untuk memilih kolom-kolom yang diinginkan. Sintaks:
```
select(<data frame>, <var1>, <var2>,…)
```
Hasil dari `select()` adalah data frame baru yang hanya berisi kolom-kolom yang terpilih.
Contoh 1: Ingin menampilkan hanya baris Country dan Style dari ramen.ratings
```{r Contoh 1 select, error=TRUE}
select(ramen.ratings, Country, Style)
```
Contoh 2: Ingin menampilkan hanya baris Variety dan Style dari ramen.ratings yang memiliki Stars > 4
```{r Contoh 2 select, error=TRUE}
select(filter(ramen.ratings, Stars>4), Variety, Style)
```
Bagaimana jika pada contoh 2 tadi, yang dilakukan adalah filter dulu?
```{r Contoh 2 salah, error=TRUE}
filter(select(ramen.ratings, Variety, Style), Stars > 4)
```
Perhatikan pada contoh 2, terdapat fungsi yang menjadi parameter fungsi. Bayangkan jika ada lebih banyak lagi rekursif fungsi, pasti akan lebih mudah melakukan kesalahan penulisan. Oleh karena itu, ada cara penulisan yang lebih rapih di R dengan menggunakan pipes. Operator pipes adalah `%>%`.
```
<data frame> %>%
function(<par>)
```
akan memiliki makna yang sama dengan
```
function(<data frame>, <par>)
```
Jadi `select(filter(ramen.ratings, Stars>4), Variety, Style)` dapat ditulis sebagai:
```{r contoh pipes, error=TRUE}
filter(ramen.ratings, Stars>4) %>%
select(Variety, Style)
```
dan
```{r contoh pipes 2, error=TRUE}
ramen.ratings %>%
filter(Stars>4) %>%
select(Variety, Style)
```
Tampilkan hanya kolom-kolom Variety, Style, dan Country dari data frame ramen.ratings menggunakan `select()`
```{r}
ramen.ratings %>%
select(Variety,Style,Country)
```
Tampilkan kolom-kolom Brand dan Variety dari data frame ramen.ratings yang memiliki berasalah dari negara Indonesia
```{r}
ramen.ratings %>%
filter(Country == "Indonesia") %>%
select(Brand,Variety)
```
`group_by()` dan `summarise()`
Hasil dari group_by() : data frame baru yang sudah di-grup berdasarkan variabel-variabelnya. Sintaks dari group_by() adalah:
```
group_by(<data frame>, <var1>, <var2>,…)
```
Contoh: Ingin mengelompokan ramen.ratings berdasarkan Style.
```{r contoh group_by, error=TRUE}
group_by(ramen.ratings, Style)
```
Kalau Anda perhatikan, hasil dari group_by seperti sama saja dengan sebelumnya. Group_by akan "terasa" berguna jika digabungkan dengan perintah lain seperti `summarise()`. `summarise()` berguna untuk meringkas beberpa nilai menjadi sebuah nilai yang mewakili sebuah kelompok kategori. Sintaks dari `summarise()`:
```
summarize(<data frame yang sudah di group_by>, <summary1>, …)
```
Beberapa fungsi summary:
- Center: `mean()`, `median()`
- Spread: `sd()`, `IQR()`
- Range: `min()`, `max()`, `quantile()`
- Count: `n()`, `n_distinct()`
Contoh 1: Ingin menghitung banyaknya elemen masing-masing Style
```{r Contoh 1 summarise, error=TRUE}
ramen.ratings %>%
group_by(Style) %>%
summarise(n())
```
Contoh 2: Ingin menghitung rata-rata Stars untuk masing-masing Style
```{r Contoh 2 summarise, error=TRUE}
ramen.ratings %>%
group_by(Style) %>%
summarise(mean(Stars))
```
Perhatikan bahwa ada baris yang NA. Untuk mengabaikan baris-baris NA, Anda dapat menggunakan perintah `na.rm=TRUE`
```{r Contoh 2 summarise 2, error=TRUE}
ramen.ratings %>%
group_by(Style) %>%
summarise(mean(Stars, na.rm=TRUE))
```
Anda juga dapat memberi nama untuk kolom baru hasil summary seperti berikut:
```{r Contoh 2 summarise 3, error=TRUE}
ramen.ratings %>%
group_by(Style) %>%
summarise(rata2 = mean(Stars, na.rm=TRUE))
```
Hitunglah rata-rata Stars untuk masing-masing Style per negara.
```{r}
ramen.ratings %>%
group_by(Country) %>%
summarise(means=mean(as.numeric(Stars), na.rm = TRUE))
```
Hitunglah banyaknya Variety yang dikeluarkan oleh masing-masing brand.
```{r}
ramen.ratings %>%
group_by(Brand) %>%
summarise(jumlah=n_distinct(Variety))
```
Tampilkan rating maksimal untuk masing-masing brand.
```{r}
ramen.ratings %>%
group_by(Brand) %>%
summarise(max_brand=max(Stars))
```
Posting Komentar