##all 12 months
all_months <- c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
##our data
some_months <- c("Mar", "Dec", "Jan", "Apr", "Jul")
#Alphabetical sort
sort(some_months)
## [1] "Apr" "Dec" "Jan" "Jul" "Mar"
mon <- factor(some_months, levels = all_months)
mon
## [1] Mar Dec Jan Apr Jul
## Levels: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
##Interpretasi:
#factor(), berisi data bulan tertentu dan akan diubah menjadi variabel kategorik berdasar urutan bulan.
#some_months, vektor yang berisi bulan tertentu misal seperti contoh di atas (Maret,Desember,Januari,April, dan Juli).
#levels = all_months, akan mengurutkan level kategori bulan dari Januari sampai Desember(all_months).
#mon, setelah data diubah ke dalam vektor maka outputnya akan disimpan ke dalam variabel mon
#Misalnya some_months berisi bulan yang tidak berurutan seperti "Dec", "Mar", "Jan", "Jul", "Apr", maka setelah dijalankan, hasilnya akan tetap mengikuti urutan dari Januari sampai Desember sesuai dengan urutan di all_months. Jadi ketika kita tampilkan variabel mon maka output nya akan menjadi (Levels: Jan Feb Mar ... Dec). Urutan akan tetap sesuai dengan urutan bulan yang benar walaupun data aslinta tidak berurutan pada some_months.
mon <- factor(some_months, levels = all_months)
sort(mon)
## [1] Jan Mar Apr Jul Dec
## Levels: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
#sort(), digunakan untuk mengurutkan data, tetapi karena variabel mon sudah berupa faktor maka akan mengurutkan berdasar urutan level faktor yaitu all_months.
#Jika some_months berisi bulan yang tidak urut, seperti Mar, Dec, Jan, Jul, Apr, maka setelah diubah menjadi faktor (mon), fungsi sort() akan mengurutkan bulan-bulan tersebut mengikuti urutan Januari hingga Desember sesuai dengan yang ada di all_months.
library(forcats)
## Warning: package 'forcats' was built under R version 4.4.3
mon_relevel <- fct_relevel(mon,"Jul", "Aug", "Sep", "Oct", "Nov", "Dec", after = 0)
mon_relevel
## [1] Mar Dec Jan Apr Jul
## Levels: Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun
sort(mon_relevel)
## [1] Jul Dec Jan Mar Apr
## Levels: Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun
#Sintaks di atas ingin mengubah level faktor mon dan memindahkan bulan ("Jul", "Aug", "Sep", "Oct", "Nov", "Dec") setelah bulan "Jan"
#fungsi package fct_relevel() adalah fungsi dari paket forcats yang digunakan untuk mengubah urutan level faktor.
#mon_relevel akan menampilkan hasil dari faktor yang sudah diubah urutan level yang baru.
#sort_relevel akan mengurutkan faktor mon_relevel berdasarkan urutan level yang baru.
some_moths <- c("Mar", "Dec", "Jan", "Apr", "Jul")
mon_inorder <- fct_inorder(some_months)
mon_inorder
## [1] Mar Dec Jan Apr Jul
## Levels: Mar Dec Jan Apr Jul
sort(mon_inorder)
## [1] Mar Dec Jan Apr Jul
## Levels: Mar Dec Jan Apr Jul
#mon_inorder akan menampilkan variabel mon_inorder yang merupakan hasil dari fct_inorder(), yaitu faktor dengan urutan level yang disesuaikan dengan urutan kemunculan bulan-bulan di some_months. Jadi, sintaks ini akan menunjukkan level faktor yang baru sesuai urutan asli yang ada di some_months.
##sort(mon_inorder) akan mengurutkan faktor mon_inorder berdasarkan urutan levelnya.
library(janitor)
## Warning: package 'janitor' was built under R version 4.4.3
##
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
tabyl(chickwts$feed)
## chickwts$feed n percent
## casein 12 0.1690141
## horsebean 10 0.1408451
## linseed 12 0.1690141
## meatmeal 11 0.1549296
## soybean 14 0.1971831
## sunflower 12 0.1690141
fct_infreq(chickwts$feed) %>% head()
## [1] horsebean horsebean horsebean horsebean horsebean horsebean
## Levels: soybean casein linseed sunflower meatmeal horsebean
#tabyl adalah packages janitor untuk membuat tabel frekuensi yang menunjukkan frekuensi yang menunjukkan jumlah dan presentasi setiap kategori dalam variabel (chickwts, jenis pakan)
#fct_infreq adalah packages forcats yang mengurutkan level faktor berdasar jumlah kemunculan dari yang paling sering sampai yang paling jarang.
#Sintaks ini akan mengubah urutan level faktor feed dalam dataset chickwts sehingga level dengan frekuensi tertinggi muncul pertama. Kemudian, head() menampilkan enam level teratas.
fct_rev(fct_infreq(chickwts$feed)) %>% head()
## [1] horsebean horsebean horsebean horsebean horsebean horsebean
## Levels: horsebean meatmeal sunflower linseed casein soybean
#fct_rev adalah membalik urutan level faktor. Dengan membalik urutan setelah menggunakan fct_infreq(), level faktor akan diurutkan dari yang paling jarang hingga yang paling sering.
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.2
library(forcats)
chickwts %>%
mutate(newfeed = fct_reorder(feed, weight)) %>%
ggplot(., aes(newfeed, weight)) + geom_point()

#mutate() untuk membuat kolom baru atau modifikasi kolom yang ada dalam dataframe
#Sintaks ini untuk membuat scatter plot yang menunjukkan hubungan antara jenis pakan (feed) dan berat ayam (weight).Dengan menggunakan fct_reorder(), level feed diurutkan berdasarkan median weight, sehingga plot akan menampilkan jenis pakan dengan urutan yang mencerminkan median berat ayam.
library(janitor)
chickwts %>%
mutate(feed_recode = fct_recode(feed,
"seed" = "linseed",
"bean" = "horsebean",
"bean" = "soybean",
"meal" = "meatmeal",
"seed" = "sunflower",
"casein" = "casein"
)) %>%
tabyl(feed_recode)
## feed_recode n percent
## casein 12 0.1690141
## bean 24 0.3380282
## seed 24 0.3380282
## meal 11 0.1549296
#Dalam sintaks ini, fct_recode() digunakan untuk mengganti nama level dalam kolom feed sebagai berikut: "linseed" menjadi "seed", "horsebean" dan "soybean" menjadi "bean", "meatmeal" menjadi "meal", "sunflower" menjadi "seed", "casein" tetap "casein". Outputnya, kolom baru feed_recode ditambahkan ke chickwts, di mana level-level dalam feed telah diganti sesuai dengan ketentuan.
library(dplyr)
library(janitor)
chickwts %>%
mutate(weight_recode = ifelse(weight <= 200, "low", "high"),
weight_recode = factor(weight_recode)) %>%
tabyl(weight_recode)
## weight_recode n percent
## high 54 0.7605634
## low 17 0.2394366
#sintaks ifelse(weight <= 200, "low", "high"): Fungsi kondisional yang memberikan nilai "low" jika weight kurang dari atau sama dengan 200, dan "high" jika lebih dari 200.
#factor(weight_recode): Mengubah kolom weight_recode menjadi tipe data faktor, untuk analisis data yang kategorik.
#sintaks ini akan menampilkan Tabel frekuensi yang menunjukkan distribusi kategori "low" dan "high" berdasarkan nilai weight.
library(nycflights13)
## Warning: package 'nycflights13' was built under R version 4.4.2
library(dplyr)
library(lubridate)
## Warning: package 'lubridate' was built under R version 4.4.2
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
flights %>%
select(year,month,day) %>%
mutate(departure = make_date(year,month,day))
## # A tibble: 336,776 × 4
## year month day departure
## <int> <int> <int> <date>
## 1 2013 1 1 2013-01-01
## 2 2013 1 1 2013-01-01
## 3 2013 1 1 2013-01-01
## 4 2013 1 1 2013-01-01
## 5 2013 1 1 2013-01-01
## 6 2013 1 1 2013-01-01
## 7 2013 1 1 2013-01-01
## 8 2013 1 1 2013-01-01
## 9 2013 1 1 2013-01-01
## 10 2013 1 1 2013-01-01
## # ℹ 336,766 more rows
#select digunakan untuk memilih kolom tertentu dari dataset, dalam konteks ini kolom yang dipilih adalah year,month, dan day dari dataset flights.
#mutate akan digunakan untuk membuat kolom baru dengan menggabungnkan kolom year,month,dan day menjadi objek date yang menjadi satu kolom yang lengkap
#sintaks ini akan menghasilkan dataset baru yang hanya berisi kolom year, month, dan day, dan menambahkan kolom baru departure yang berisi tanggal lengkap (hasil dari make_date()).
library(nycflights13)
library(dplyr)
library(lubridate)
flights %>%
select(year,month,day,hour,minute) %>%
mutate(departure = make_datetime(year,month,day,hour,minute))
## # A tibble: 336,776 × 6
## year month day hour minute departure
## <int> <int> <int> <dbl> <dbl> <dttm>
## 1 2013 1 1 5 15 2013-01-01 05:15:00
## 2 2013 1 1 5 29 2013-01-01 05:29:00
## 3 2013 1 1 5 40 2013-01-01 05:40:00
## 4 2013 1 1 5 45 2013-01-01 05:45:00
## 5 2013 1 1 6 0 2013-01-01 06:00:00
## 6 2013 1 1 5 58 2013-01-01 05:58:00
## 7 2013 1 1 6 0 2013-01-01 06:00:00
## 8 2013 1 1 6 0 2013-01-01 06:00:00
## 9 2013 1 1 6 0 2013-01-01 06:00:00
## 10 2013 1 1 6 0 2013-01-01 06:00:00
## # ℹ 336,766 more rows
#select digunakan untuk memilih kolom tertentu dari dataset, dalam konteks ini kolom yang dipilih adalah year,month,day,hour, dan minute dari dataset flights.
#mutate akan menggabungkan komponen tanggal dan waktu yang menghasilkan kolom yang lengkap yang berisi tanggal,jam,menit serta membuat kolom baru departure yang berisi waktu keberangkatan lengkap sesuai ketentuan sebelumnya.
library(nycflights13)
mydate <- ymd("1988-09-29")
#sintaks ini untuk mengkonversi tanggal dalam format year-month-day.
year(mydate)
## [1] 1988
#sintaks ini untuk mengambil tahun dari mydate.
mday(mydate)
## [1] 29
#sintaks ini untuk mengambil tanggal dari mydate.
wday(mydate)
## [1] 5
#sintaks ini untuk mengambil hari dari mydate.
wday(mydate, label =TRUE)
## [1] Thu
## Levels: Sun < Mon < Tue < Wed < Thu < Fri < Sat
#sintaks ini akan mengembailkan nama hari dalam minggu bukan nomor hari, contoh output nya "Mon" untuk senin.
h_age <- today() - ymd("1979-10-14")
h_age
## Time difference of 16620 days
#sintaks ini menampilkan selisih waktu antara tanggal saat ini dan 14 oktober 1979 yang hasilnya berupa interval dalam satuan hari dan waktu yang tersisa(jam,menit,detik).
as.duration(h_age)
## [1] "1435968000s (~45.5 years)"
#sintaks ini untuk mengkonversi interval waktu menjadi durasi (jumlah detik,menit,jam).
dseconds(15)
## [1] "15s"
#sintaks ini untuk membuat durasi yang mewakili 15 detik.
dminutes(10)
## [1] "600s (~10 minutes)"
#sintaks ini untuk membuat durasi yang mewakili 10 menit.
dhours(c(12,24))
## [1] "43200s (~12 hours)" "86400s (~1 days)"
#sintaks ini untuk membuat durasi yang terdiri dari 12 jam da 24 jam (1 hari).
ddays(0:5)
## [1] "0s" "86400s (~1 days)" "172800s (~2 days)"
## [4] "259200s (~3 days)" "345600s (~4 days)" "432000s (~5 days)"
#sintaks ini untuk membuat durasi yang teridri 0 hingga 5 hari yang berupa vektor.
dweeks(3)
## [1] "1814400s (~3 weeks)"
#sintaks ini untuk membuat durasi yang mewakili 3 minggu.
dyears(1)
## [1] "31557600s (~1 years)"
#sintaks ini untuk membuat durasi yang mewakili 1 tahun.
seconds(15)
## [1] "15S"
#sintaks ini untuk membuat durasi yang mewakili 15 detik.
minutes(10)
## [1] "10M 0S"
#sintaks ini untuk membuat durasi yang mewakili 10 menit.
hours(c(12,24))
## [1] "12H 0M 0S" "24H 0M 0S"
#sintaks ini untuk membuat durasi yang terdiri dari 12 jam da 24 jam (1 hari).
days(7)
## [1] "7d 0H 0M 0S"
#sintaks ini untuk membuat durasi yang mewakili 7 hari.
months(1:6)
## [1] "1m 0d 0H 0M 0S" "2m 0d 0H 0M 0S" "3m 0d 0H 0M 0S" "4m 0d 0H 0M 0S"
## [5] "5m 0d 0H 0M 0S" "6m 0d 0H 0M 0S"
#sintaks ini untuk membuat durasi yang mewakili 6 bulan dalam vektor.
weeks(3)
## [1] "21d 0H 0M 0S"
#sintaks ini untuk membuat durasi yang mewakili 3 minggu.
years(1)
## [1] "1y 0m 0d 0H 0M 0S"
#sintaks ini untuk membuat durasi yang mewakili 1 tahun.
library(nycflights13)
library(lubridate)
10*(months(6)+days(1))
## [1] "60m 10d 0H 0M 0S"
#sintaks ini mengalikan durasi 6 bulan dan 1 hari dengan 10.
days(50)+hours(25)+minutes(2)
## [1] "50d 25H 2M 0S"
#sintaks ini menambahkan 50 hari, 25 jam, dan 2 menit yang menghasilkan durasi total.
ymd("2016-01-01")+dyears(1)
## [1] "2016-12-31 06:00:00 UTC"
#sintaks ini menambahkan 1 tahun ke tanggal sebelum 1 januari 2017.
ymd("2016-01-01")+years(1)
## [1] "2017-01-01"
#sintaks ini menambahkan 1 tahun ke tanggal 1 Januari 2017.
ymd_hms("2016-01-01 06:00:00")
## [1] "2016-01-01 06:00:00 UTC"
#sintaks ini untuk mengonversi string (tahun,bulan,hari,jam,menit,dan detik) menjadi objek waktu.
one_pm <- ymd_hms("2016-03-12 13:00:00", tz = "America/New_York")
next_day <- one_pm + ddays(1)
next_day
## [1] "2016-03-13 14:00:00 EDT"
#sintaks ini mnembahkan 1 hari ke tanggal yang disimpan ke dalam one_pm.
one_pm <- ymd_hms("2016-03-12 13:00:00", tz = "America/New_York")
next_day2 <- one_pm + days(1)
next_day2
## [1] "2016-03-13 13:00:00 EDT"
#sintaks ini mnembahkan 1 hari ke tanggal yang disimpan ke dalam one_pm.
years(1) / days(1)
## [1] 365.25
# years(1) adalah durasi 1 tahun dan days(1) adalah durasi yang 1 hari. Operasi diatas akan membagi durasi satu tahun dengan satu hari.
next_year <- today() + years(1)
(today() %--% next_year) %/% days(1)
## [1] 365
#sintaks ini akan membagi interval waktu dengan durasi satu hari untuk menghasilkan jumlah hari antara today() dan next_year (akan menghitung jumlah hari antara 14 Maret 2025 dan 14 Maret 2026, yang hasilnya adalah 365 hari.