List adalah objek yang dapat menyimpan berbagai jenis data sekaligus, misalnya teks, angka, vector, bahkan matrix. Komponen list dapat diakses dengan $, [[ ]], atau [ ].
mahasiswa <- list(
nama = "Rafael",
umur = 20,
nilai = c(80, 85, 90)
)
mahasiswa
## $nama
## [1] "Rafael"
##
## $umur
## [1] 20
##
## $nilai
## [1] 80 85 90
mahasiswa$nama
## [1] "Rafael"
mahasiswa[[2]]
## [1] 20
mahasiswa$nilai
## [1] 80 85 90
length(mahasiswa)
## [1] 3
Penjelasan
list() digunakan untuk membuat sebuah list. List mahasiswa terdiri dari tiga komponen, yaitu nama, umur, dan nilai. Komponen dapat dipanggil menggunakan $ atau nomor posisinya dengan [[ ]]. length() digunakan untuk mengetahui jumlah komponen utama.
Kesimpulan
List dapat menyimpan beberapa jenis data berbeda dalam satu objek dan setiap komponennya dapat diakses secara terpisah.
List dapat dibuat dari beberapa objek dan diperluas dengan menambahkan komponen baru.
data_mhs <- list(
nama = "Andi",
umur = 19
)
data_mhs
## $nama
## [1] "Andi"
##
## $umur
## [1] 19
# Menambahkan komponen baru
data_mhs[3] <- list(nilai = 88)
data_mhs
## $nama
## [1] "Andi"
##
## $umur
## [1] 19
##
## [[3]]
## [1] 88
Penjelasan
Awalnya data_mhs memiliki dua komponen. Kemudian komponen ketiga bernama nilai ditambahkan menggunakan indeks [3].
Kesimpulan
List bersifat fleksibel karena komponennya dapat ditambah setelah list dibuat.
Fungsi c() dapat menggabungkan beberapa list menjadi satu list.
list_A <- list(nama = "Andi")
list_B <- list(umur = 19)
list_C <- list(nilai = 88)
list_gabungan <- c(list_A, list_B, list_C)
list_gabungan
## $nama
## [1] "Andi"
##
## $umur
## [1] 19
##
## $nilai
## [1] 88
Penjelasan
c() menggabungkan seluruh komponen dari list_A, list_B, dan list_C secara berurutan.
Kesimpulan
Beberapa list dapat digabungkan menjadi satu list baru menggunakan fungsi c().
Data frame adalah struktur berbentuk tabel. Setiap kolom dapat mempunyai tipe data yang berbeda, tetapi jumlah barisnya harus sesuai.
mahasiswa_df <- data.frame(
Nama = c("Andi", "Budi", "Citra"),
Umur = c(19, 20, 21),
Lulus = c(TRUE, FALSE, TRUE)
)
mahasiswa_df
## Nama Umur Lulus
## 1 Andi 19 TRUE
## 2 Budi 20 FALSE
## 3 Citra 21 TRUE
class(mahasiswa_df)
## [1] "data.frame"
Penjelasan
Data frame memiliki tiga kolom dengan tipe berbeda: Nama berupa character, Umur berupa numeric, dan Lulus berupa logical.
Kesimpulan
Data frame digunakan untuk menyimpan data berbentuk tabel yang kolom-kolomnya dapat memiliki tipe data berbeda.
Subbab ini secara khusus membahas pembuatan data frame menggunakan data.frame() dan konversi menggunakan as.data.frame().
nama <- c("Andi", "Budi", "Citra")
nilai <- c(80, 75, 90)
df_nilai <- data.frame(
Nama = nama,
Nilai = nilai
)
df_nilai
## Nama Nilai
## 1 Andi 80
## 2 Budi 75
## 3 Citra 90
konversi list:
list_nilai <- list(
Nama = c("Andi", "Budi"),
Nilai = c(80, 90)
)
df_dari_list <- as.data.frame(list_nilai)
df_dari_list
## Nama Nilai
## 1 Andi 80
## 2 Budi 90
Penjelasan
data.frame() membentuk data frame langsung dari beberapa vector. as.data.frame() digunakan untuk mengubah objek yang sesuai, seperti list, menjadi data frame.
Kesimpulan
Data frame dapat dibuat secara langsung dengan data.frame() maupun dari objek lain menggunakan as.data.frame().
attach() membuat kolom data frame dapat dipanggil langsung, sedangkan detach() menghapus data frame tersebut dari search path.
df_attach <- data.frame(
nilai_uts = c(70, 80, 90),
nilai_uas = c(75, 85, 95)
)
# Mencegah attach ganda jika kode dijalankan ulang
if ("df_attach" %in% search()) {
detach("df_attach")
}
attach(df_attach)
nilai_uts
## [1] 70 80 90
mean(nilai_uts)
## [1] 80
detach("df_attach")
Penjelasan
Setelah attach(df_attach), kolom nilai_uts dapat dipanggil tanpa menulis df_attach$nilai_uts. Setelah selesai, detach() digunakan untuk melepaskannya kembali.
Kesimpulan
attach() mempermudah akses sementara terhadap kolom data frame dan detach() mengembalikannya ke kondisi semula.
Subbab ini membahas cara bekerja dengan data frame dan menyimpan variabel yang berkaitan dalam satu struktur.
nilai_mhs <- data.frame(
Nama = c("Andi", "Budi", "Citra"),
UTS = c(80, 70, 90),
UAS = c(85, 75, 95)
)
# Menambahkan kolom baru
nilai_mhs$Rata_rata <- (
nilai_mhs$UTS + nilai_mhs$UAS
) / 2
nilai_mhs
## Nama UTS UAS Rata_rata
## 1 Andi 80 85 82.5
## 2 Budi 70 75 72.5
## 3 Citra 90 95 92.5
Penjelasan
Kolom Rata_rata dibuat dari nilai UTS dan UAS kemudian ditambahkan langsung ke dalam data frame.
Kesimpulan
Data frame dapat dimodifikasi dan diperluas dengan menambahkan variabel atau kolom baru.
Selain data frame, objek dengan mode list juga dapat digunakan dengan attach().
list_data <- list(
data_x = c(10, 20, 30),
data_y = c(5, 10, 15)
)
if ("list_data" %in% search()) {
detach("list_data")
}
attach(list_data)
data_x
## [1] 10 20 30
data_y
## [1] 5 10 15
data_x + data_y
## [1] 15 30 45
detach("list_data")
Penjelasan
Setelah list di-attach, komponen data_x dan data_y dapat digunakan langsung seperti variabel biasa.
Kesimpulan
attach() tidak hanya dapat digunakan pada data frame, tetapi juga pada list.
Fungsi search() digunakan untuk melihat search path yang aktif, sedangkan ls() dapat digunakan untuk melihat objek dalam posisi search path tertentu.
df_path <- data.frame(
variabel_a = 1:3,
variabel_b = 4:6
)
# Search path sebelum attach
search()
## [1] ".GlobalEnv" "package:stats" "package:graphics"
## [4] "package:grDevices" "package:utils" "package:datasets"
## [7] "package:methods" "Autoloads" "package:base"
if ("df_path" %in% search()) {
detach("df_path")
}
attach(df_path)
# Search path setelah attach
search()
## [1] ".GlobalEnv" "df_path" "package:stats"
## [4] "package:graphics" "package:grDevices" "package:utils"
## [7] "package:datasets" "package:methods" "Autoloads"
## [10] "package:base"
# Melihat isi data frame yang terpasang
ls(pos = "df_path")
## [1] "variabel_a" "variabel_b"
detach("df_path")
# Search path setelah detach
search()
## [1] ".GlobalEnv" "package:stats" "package:graphics"
## [4] "package:grDevices" "package:utils" "package:datasets"
## [7] "package:methods" "Autoloads" "package:base"
Penjelasan
search() menunjukkan objek dan package yang sedang tersedia pada search path. Setelah attach(df_path), nama df_path muncul. Setelah detach(), nama tersebut kembali hilang.
Kesimpulan
search() membantu mengetahui objek atau package apa saja yang sedang terpasang dan dapat diakses oleh R.
# LISTS AND DATA FRAMES
# 6.1 Lists
mahasiswa <- list(
nama = "Rafael",
umur = 20,
nilai = c(80, 85, 90)
)
mahasiswa
## $nama
## [1] "Rafael"
##
## $umur
## [1] 20
##
## $nilai
## [1] 80 85 90
mahasiswa$nama
## [1] "Rafael"
mahasiswa[[2]]
## [1] 20
mahasiswa$nilai
## [1] 80 85 90
length(mahasiswa)
## [1] 3
# 6.2 Constructing and Modifying Lists
data_mhs <- list(
nama = "Andi",
umur = 19
)
data_mhs
## $nama
## [1] "Andi"
##
## $umur
## [1] 19
data_mhs[3] <- list(nilai = 88)
data_mhs
## $nama
## [1] "Andi"
##
## $umur
## [1] 19
##
## [[3]]
## [1] 88
# 6.2.1 Concatenating Lists
list_A <- list(nama = "Andi")
list_B <- list(umur = 19)
list_C <- list(nilai = 88)
list_gabungan <- c(list_A, list_B, list_C)
list_gabungan
## $nama
## [1] "Andi"
##
## $umur
## [1] 19
##
## $nilai
## [1] 88
# 6.3 Data Frames
mahasiswa_df <- data.frame(
Nama = c("Andi", "Budi", "Citra"),
Umur = c(19, 20, 21),
Lulus = c(TRUE, FALSE, TRUE)
)
mahasiswa_df
## Nama Umur Lulus
## 1 Andi 19 TRUE
## 2 Budi 20 FALSE
## 3 Citra 21 TRUE
class(mahasiswa_df)
## [1] "data.frame"
# 6.3.1 Making Data Frames
nama <- c("Andi", "Budi", "Citra")
nilai <- c(80, 75, 90)
df_nilai <- data.frame(
Nama = nama,
Nilai = nilai
)
df_nilai
## Nama Nilai
## 1 Andi 80
## 2 Budi 75
## 3 Citra 90
list_nilai <- list(
Nama = c("Andi", "Budi"),
Nilai = c(80, 90)
)
df_dari_list <- as.data.frame(list_nilai)
df_dari_list
## Nama Nilai
## 1 Andi 80
## 2 Budi 90
# 6.3.2 attach() and detach()
df_attach <- data.frame(
nilai_uts = c(70, 80, 90),
nilai_uas = c(75, 85, 95)
)
if ("df_attach" %in% search()) {
detach("df_attach")
}
attach(df_attach)
nilai_uts
## [1] 70 80 90
mean(nilai_uts)
## [1] 80
detach("df_attach")
# 6.3.3 Working with Data Frames
nilai_mhs <- data.frame(
Nama = c("Andi", "Budi", "Citra"),
UTS = c(80, 70, 90),
UAS = c(85, 75, 95)
)
nilai_mhs$Rata_rata <- (
nilai_mhs$UTS + nilai_mhs$UAS
) / 2
nilai_mhs
## Nama UTS UAS Rata_rata
## 1 Andi 80 85 82.5
## 2 Budi 70 75 72.5
## 3 Citra 90 95 92.5
# 6.3.4 Attaching Arbitrary Lists
list_data <- list(
data_x = c(10, 20, 30),
data_y = c(5, 10, 15)
)
if ("list_data" %in% search()) {
detach("list_data")
}
attach(list_data)
data_x
## [1] 10 20 30
data_y
## [1] 5 10 15
data_x + data_y
## [1] 15 30 45
detach("list_data")
# 6.3.5 Managing the Search Path
df_path <- data.frame(
variabel_a = 1:3,
variabel_b = 4:6
)
search()
## [1] ".GlobalEnv" "package:stats" "package:graphics"
## [4] "package:grDevices" "package:utils" "package:datasets"
## [7] "package:methods" "Autoloads" "package:base"
if ("df_path" %in% search()) {
detach("df_path")
}
attach(df_path)
search()
## [1] ".GlobalEnv" "df_path" "package:stats"
## [4] "package:graphics" "package:grDevices" "package:utils"
## [7] "package:datasets" "package:methods" "Autoloads"
## [10] "package:base"
ls(pos = "df_path")
## [1] "variabel_a" "variabel_b"
detach("df_path")
search()
## [1] ".GlobalEnv" "package:stats" "package:graphics"
## [4] "package:grDevices" "package:utils" "package:datasets"
## [7] "package:methods" "Autoloads" "package:base"
Bab ini membahas pembacaan data dari file menggunakan read.table(), scan(), dataset bawaan, dataset package, serta pengeditan data.
Fokus subbab ini adalah membaca sebuah tabel dari file menjadi data frame. PDF menggunakan read.table() untuk tujuan tersebut.
file_tabel <- tempfile(fileext = ".txt")
writeLines(
c(
"Nama Nilai Umur",
"Andi 80 19",
"Budi 75 20",
"Citra 90 21"
),
file_tabel
)
data_tabel <- read.table(
file_tabel,
header = TRUE
)
data_tabel
## Nama Nilai Umur
## 1 Andi 80 19
## 2 Budi 75 20
## 3 Citra 90 21
Penjelasan
tempfile() membuat lokasi file sementara. writeLines() hanya digunakan untuk menyediakan file contoh. Fokus utamanya adalah:
read.table(file_tabel, header = TRUE)
yang membaca isi file menjadi sebuah data frame. header = TRUE menunjukkan bahwa baris pertama merupakan nama kolom.
Kesimpulan
read.table() digunakan untuk membaca data tabel dari file eksternal ke dalam R.
scan() merupakan fungsi untuk membaca data yang lebih sederhana dari file. Fungsi ini dapat menghasilkan vector maupun list.
file_scan <- tempfile(fileext = ".txt")
writeLines(
c(
"A 10 20",
"B 30 40",
"C 50 60"
),
file_scan
)
data_scan <- scan(
file_scan,
what = list(
id = "",
x = 0,
y = 0
),
quiet = TRUE
)
data_scan
## $id
## [1] "A" "B" "C"
##
## $x
## [1] 10 30 50
##
## $y
## [1] 20 40 60
data_scan$id
## [1] "A" "B" "C"
data_scan$x
## [1] 10 30 50
data_scan$y
## [1] 20 40 60
Penjelasan
Pada what, nilai “” menunjukkan bahwa id dibaca sebagai character, sedangkan 0 menunjukkan bahwa x dan y dibaca sebagai numeric.
Kesimpulan
scan() dapat membaca data dari file dan menyimpannya sebagai vector atau list sesuai tipe data yang ditentukan.
R memiliki dataset bawaan yang dapat langsung digunakan untuk pembelajaran dan analisis. PDF menggunakan fungsi data() untuk mengaksesnya.
data("iris")
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
str(iris)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
Penjelasan
data(“iris”) mengakses dataset bawaan iris. head() menampilkan enam baris pertama, str() menunjukkan struktur data, dan summary() menghasilkan ringkasan statistik.
Kesimpulan
Dataset bawaan R dapat digunakan tanpa perlu membuat atau mengimpor file sendiri.
Dataset juga dapat dipanggil dari package tertentu menggunakan argumen package.
data(
"Puromycin",
package = "datasets"
)
head(Puromycin)
## conc rate state
## 1 0.02 76 treated
## 2 0.02 47 treated
## 3 0.06 97 treated
## 4 0.06 107 treated
## 5 0.11 123 treated
## 6 0.11 139 treated
summary(Puromycin)
## conc rate state
## Min. :0.0200 Min. : 47.0 treated :12
## 1st Qu.:0.0600 1st Qu.: 91.5 untreated:11
## Median :0.1100 Median :124.0
## Mean :0.3122 Mean :126.8
## 3rd Qu.:0.5600 3rd Qu.:158.5
## Max. :1.1000 Max. :207.0
Penjelasan
Argumen: package = “datasets”
menunjukkan bahwa dataset Puromycin diambil dari package datasets.
Kesimpulan
Fungsi data() dengan argumen package dapat digunakan untuk mengambil dataset dari package tertentu.
PDF membahas edit() dan fix() untuk mengedit data melalui editor seperti spreadsheet.
Masalahnya, edit() bersifat interaktif. Kalau dijalankan langsung saat Knit, proses dapat berhenti menunggu jendela editor.
data_edit <- data.frame(
Nama = c("Andi", "Budi"),
Nilai = c(80, 75)
)
data_edit
## Nama Nilai
## 1 Andi 80
## 2 Budi 75
if (interactive()) {
data_hasil_edit <- edit(data_edit)
} else {
data_hasil_edit <- data_edit
}
data_hasil_edit
## Nama Nilai
## 1 Andi 80
## 2 Budi 75
Penjelasan
Jika kode dijalankan langsung secara interaktif di RStudio Console, edit(data_edit) akan membuka editor data. Saat proses Knit, interactive() bernilai FALSE, sehingga R Markdown tidak berhenti menunggu jendela editor.
Kesimpulan
edit() digunakan untuk mengubah data secara interaktif melalui tampilan seperti spreadsheet. Pemeriksaan interactive() membuat kode tetap aman saat dijalankan melalui R Markdown.
# READING DATA FROM FILES
# 7.1 read.table()
file_tabel <- tempfile(fileext = ".txt")
writeLines(
c(
"Nama Nilai Umur",
"Andi 80 19",
"Budi 75 20",
"Citra 90 21"
),
file_tabel
)
data_tabel <- read.table(
file_tabel,
header = TRUE
)
data_tabel
## Nama Nilai Umur
## 1 Andi 80 19
## 2 Budi 75 20
## 3 Citra 90 21
# 7.2 scan()
file_scan <- tempfile(fileext = ".txt")
writeLines(
c(
"A 10 20",
"B 30 40",
"C 50 60"
),
file_scan
)
data_scan <- scan(
file_scan,
what = list(
id = "",
x = 0,
y = 0
),
quiet = TRUE
)
data_scan
## $id
## [1] "A" "B" "C"
##
## $x
## [1] 10 30 50
##
## $y
## [1] 20 40 60
data_scan$id
## [1] "A" "B" "C"
data_scan$x
## [1] 10 30 50
data_scan$y
## [1] 20 40 60
# 7.3 Built-in Datasets
data("iris")
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
str(iris)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
# 7.3.1 Data from R Packages
data(
"Puromycin",
package = "datasets"
)
head(Puromycin)
## conc rate state
## 1 0.02 76 treated
## 2 0.02 47 treated
## 3 0.06 97 treated
## 4 0.06 107 treated
## 5 0.11 123 treated
## 6 0.11 139 treated
summary(Puromycin)
## conc rate state
## Min. :0.0200 Min. : 47.0 treated :12
## 1st Qu.:0.0600 1st Qu.: 91.5 untreated:11
## Median :0.1100 Median :124.0
## Mean :0.3122 Mean :126.8
## 3rd Qu.:0.5600 3rd Qu.:158.5
## Max. :1.1000 Max. :207.0
# 7.4 Editing Data
data_edit <- data.frame(
Nama = c("Andi", "Budi"),
Nilai = c(80, 75)
)
data_edit
## Nama Nilai
## 1 Andi 80
## 2 Budi 75
if (interactive()) {
data_hasil_edit <- edit(data_edit)
} else {
data_hasil_edit <- data_edit
}
data_hasil_edit
## Nama Nilai
## 1 Andi 80
## 2 Budi 75