###Bab 6 Lists dan Data Frames #6.1 List Penjalasan List adalah objek R yang dapat menyimpan beberapa objek dengan tipe data berbeda dalam satu struktur. Setiap komponen dapat diakses menggunakan [[ ]], [ ], atau $.

# Membuat list
data_mahasiswa <- list(
  nama = "Ivan",
  umur = 18,
  nilai = c(80, 85, 90)
)

# Menampilkan list
data_mahasiswa
## $nama
## [1] "Ivan"
## 
## $umur
## [1] 18
## 
## $nilai
## [1] 80 85 90
# Mengakses komponen
data_mahasiswa[[1]]
## [1] "Ivan"
data_mahasiswa$nama
## [1] "Ivan"
data_mahasiswa$nilai
## [1] 80 85 90
# Melihat jumlah komponen
length(data_mahasiswa)
## [1] 3
# Perbedaan [[ ]] dan [ ]
data_mahasiswa[[1]]
## [1] "Ivan"
data_mahasiswa[1]
## $nama
## [1] "Ivan"

List digunakan untuk menyimpan berbagai jenis data dalam satu objek dan memudahkan pengelompokan data.

#6.2 Constructing and Modifying Lists Penjelasan: List dibuat menggunakan list(). Komponen baru dapat ditambahkan dan nilai komponen yang sudah ada dapat diubah

# Membuat list
mahasiswa <- list(
  nama = "Ivan",
  umur = 18,
  jurusan = "Statistika",
  nilai = c(80, 85, 90)
)

# Menampilkan list
mahasiswa
## $nama
## [1] "Ivan"
## 
## $umur
## [1] 18
## 
## $jurusan
## [1] "Statistika"
## 
## $nilai
## [1] 80 85 90
# Menambahkan komponen
mahasiswa$semester <- 1

# Mengubah komponen
mahasiswa$umur <- 19

# Menampilkan hasil
mahasiswa
## $nama
## [1] "Ivan"
## 
## $umur
## [1] 19
## 
## $jurusan
## [1] "Statistika"
## 
## $nilai
## [1] 80 85 90
## 
## $semester
## [1] 1

List bersifat fleksibel karena komponennya dapat ditambahkan dan diubah sesuai kebutuhan.

#6.3 Data Frames Penjelasan: Data frame adalah struktur data berbentuk tabel yang terdiri dari baris dan kolom. Kolom dapat memiliki tipe data berbeda, tetapi panjang setiap kolom harus sama.

# Membuat data frame
data_mahasiswa <- data.frame(
  nama = c("Ivan", "Budi", "Andi"),
  umur = c(18, 19, 18),
  nilai = c(85, 90, 80)
)

# Menampilkan data
data_mahasiswa
##   nama umur nilai
## 1 Ivan   18    85
## 2 Budi   19    90
## 3 Andi   18    80
# Mengakses kolom
data_mahasiswa$nama
## [1] "Ivan" "Budi" "Andi"
data_mahasiswa$nilai
## [1] 85 90 80
# Menghitung rata-rata nilai
mean(data_mahasiswa$nilai)
## [1] 85

Data frame digunakan untuk menyimpan dan mengolah data berbentuk tabel dalam R.

#6.3.1 Making Data Frames Penjelasan: Data frame dapat dibuat dengan data.frame(). List yang sesuai juga dapat diubah menjadi data frame menggunakan as.data.frame()

# Membuat vector
nama <- c("Ivan", "Budi", "Andi")
umur <- c(18, 19, 18)
nilai <- c(85, 90, 80)

# Membuat data frame
mahasiswa <- data.frame(
  nama = nama,
  umur = umur,
  nilai = nilai
)

# Menampilkan data frame
mahasiswa
##   nama umur nilai
## 1 Ivan   18    85
## 2 Budi   19    90
## 3 Andi   18    80
# Membuat list
data_list <- list(
  nama = c("Ivan", "Budi", "Andi"),
  nilai = c(85, 90, 80)
)

# Mengubah list menjadi data frame
df <- as.data.frame(data_list)

# Menampilkan hasil
df
##   nama nilai
## 1 Ivan    85
## 2 Budi    90
## 3 Andi    80

data.frame() digunakan untuk membuat data frame, sedangkan as.data.frame() digunakan untuk mengubah objek menjadi data frame.

#6.3.2 attach() and detach() Penjelasan: attach() membuat variabel dalam data frame dapat dipanggil langsung tanpa menuliskan nama data frame. detach() digunakan untuk melepaskannya dari search path.

# Membuat data frame
mahasiswa <- data.frame(
  nama = c("Ivan", "Budi", "Andi"),
  nilai = c(85, 90, 80)
)

# Menghubungkan data frame
attach(mahasiswa)
## The following objects are masked _by_ .GlobalEnv:
## 
##     nama, nilai
# Mengakses variabel secara langsung
nama
## [1] "Ivan" "Budi" "Andi"
nilai
## [1] 85 90 80
# Menghitung rata-rata
mean(nilai)
## [1] 85
# Melepaskan data frame
detach(mahasiswa)

attach() memudahkan akses variabel, sedangkan detach() menghapus data frame dari search path.

#6.3.3 Working with Data Frames Penjelasan: Data frame sebaiknya digunakan untuk mengelompokkan variabel yang berkaitan dengan satu permasalahan agar data lebih terorganisir dan mudah dianalisis.

# Membuat data frame
mahasiswa <- data.frame(
  nama = c("Ivan", "Budi", "Andi"),
  nilai = c(85, 90, 80)
)

# Menambahkan kolom baru
mahasiswa$grade <- c("B", "A", "B")

# Menampilkan data
mahasiswa
##   nama nilai grade
## 1 Ivan    85     B
## 2 Budi    90     A
## 3 Andi    80     B
# Mengakses kolom nilai
mahasiswa$nilai
## [1] 85 90 80
# Menghitung rata-rata
mean(mahasiswa$nilai)
## [1] 85

#6.3.4 Attaching Arbitrary Lists Penjelasan: attach() juga dapat digunakan pada objek berbentuk list. Setelah digunakan, list dapat dilepaskan menggunakan detach().

# Membuat list
data <- list(
  nama = "Ivan",
  nilai = 85
)

# Menghubungkan list
attach(data)
## The following objects are masked _by_ .GlobalEnv:
## 
##     nama, nilai
# Mengakses komponen
nama
## [1] "Ivan" "Budi" "Andi"
nilai
## [1] 85 90 80
# Melepaskan list
detach(data)

List dapat di-attach() agar komponennya dapat dipanggil langsung berdasarkan nama.

#6.3.5 Managing the Search Path Penjelasan: Search path menunjukkan tempat-tempat yang digunakan R untuk mencari objek. search() digunakan untuk melihat search path dan ls() untuk melihat isi suatu posisi.

# Melihat search path awal
search()
## [1] ".GlobalEnv"        "package:stats"     "package:graphics" 
## [4] "package:grDevices" "package:utils"     "package:datasets" 
## [7] "package:methods"   "Autoloads"         "package:base"
# Membuat data frame
mahasiswa <- data.frame(
  nama = c("Ivan", "Budi"),
  nilai = c(85, 90)
)

# Attach data frame
attach(mahasiswa)
## The following objects are masked _by_ .GlobalEnv:
## 
##     nama, nilai
# Melihat search path
search()
##  [1] ".GlobalEnv"        "mahasiswa"         "package:stats"    
##  [4] "package:graphics"  "package:grDevices" "package:utils"    
##  [7] "package:datasets"  "package:methods"   "Autoloads"        
## [10] "package:base"
# Melihat objek pada posisi kedua
ls(2)
## [1] "nama"  "nilai"
# Detach data frame
detach("mahasiswa")

# Melihat search path setelah detach
search()
## [1] ".GlobalEnv"        "package:stats"     "package:graphics" 
## [4] "package:grDevices" "package:utils"     "package:datasets" 
## [7] "package:methods"   "Autoloads"         "package:base"

search() digunakan untuk mengetahui objek yang aktif dalam search path, sedangkan ls() digunakan untuk melihat isinya.

###BAB 7 — READING DATA FROM FILES

#7.1 The read.table() Function Penjelasan: read.table() digunakan untuk membaca data berbentuk tabel dari file eksternal ke dalam data frame. Jika baris pertama berisi nama kolom, gunakan header=TRUE.

# Memb# Membaca file
# Membuat data untuk contoh
data_mahasiswa <- data.frame(
  nama = c("Ivan", "Budi", "Andi"),
  umur = c(18, 19, 18),
  nilai = c(85, 90, 80)
)

# Menyimpan data ke file teks
write.table(
  data_mahasiswa,
  "mahasiswa.txt",
  row.names = FALSE
)

# Membaca file menggunakan read.table()
mahasiswa <- read.table(
  "mahasiswa.txt",
  header = TRUE
)

# Menampilkan data
mahasiswa
##   nama umur nilai
## 1 Ivan   18    85
## 2 Budi   19    90
## 3 Andi   18    80
# Melihat struktur data
str(mahasiswa)
## 'data.frame':    3 obs. of  3 variables:
##  $ nama : chr  "Ivan" "Budi" "Andi"
##  $ umur : int  18 19 18
##  $ nilai: int  85 90 80
# Menampilkan 6 baris pertama
head(mahasiswa)
##   nama umur nilai
## 1 Ivan   18    85
## 2 Budi   19    90
## 3 Andi   18    80

#7.2 The scan() Function Penjelasan: scan() digunakan untuk membaca data dari file secara langsung. Data dapat dibaca sebagai vector atau beberapa komponen dalam bentuk list.

# Membuat file input.dat terlebih dahulu
cat(
  "A001 85 18
A002 90 19
A003 80 18",
  file = "input.dat"
)

# Membaca file menggunakan scan()
inp <- scan(
  "input.dat",
  what = list(
    id = "",
    nilai = 0,
    umur = 0
  )
)

# Menampilkan hasil
inp
## $id
## [1] "A001" "A002" "A003"
## 
## $nilai
## [1] 85 90 80
## 
## $umur
## [1] 18 19 18
# Mengakses masing-masing komponen
inp$id
## [1] "A001" "A002" "A003"
inp$nilai
## [1] 85 90 80
inp$umur
## [1] 18 19 18

Dataset bawaan R dapat langsung digunakan untuk latihan dan analisis tanpa harus mengimpor data dari luar

#7.3.1 Loading Data from Other R Packages Penjelasan: Dataset juga dapat berasal dari package R lainnya. Dataset dari package tertentu dapat dipanggil menggunakan argumen

# Melihat dataset yang tersedia pada package rpart
data(package = "rpart")

# Mengambil dataset dari package datasets
data(Puromycin, package = "datasets")

# Menampilkan data
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
## 7  0.22  159   treated
## 8  0.22  152   treated
## 9  0.56  191   treated
## 10 0.56  201   treated
## 11 1.10  207   treated
## 12 1.10  200   treated
## 13 0.02   67 untreated
## 14 0.02   51 untreated
## 15 0.06   84 untreated
## 16 0.06   86 untreated
## 17 0.11   98 untreated
## 18 0.11  115 untreated
## 19 0.22  131 untreated
## 20 0.22  124 untreated
## 21 0.56  144 untreated
## 22 0.56  158 untreated
## 23 1.10  160 untreated
# Melihat struktur data
str(Puromycin)
## 'data.frame':    23 obs. of  3 variables:
##  $ conc : num  0.02 0.02 0.06 0.06 0.11 0.11 0.22 0.22 0.56 0.56 ...
##  $ rate : num  76 47 97 107 123 139 159 152 191 201 ...
##  $ state: Factor w/ 2 levels "treated","untreated": 1 1 1 1 1 1 1 1 1 1 ...
##  - attr(*, "reference")= chr "A1.3, p. 269"

R dapat mengambil dataset dari berbagai package sehingga pilihan data untuk latihan dan analisis menjadi lebih banyak.

#7.4 Editing Data Penjelasan: edit() digunakan untuk mengedit data frame atau matrix melalui tampilan seperti spreadsheet. fix() digunakan untuk mengedit objek secara langsung.

# Membuat data frame
mahasiswa <- data.frame(
  nama = c("Ivan", "Budi", "Andi"),
  nilai = c(85, 90, 80)
)

# Mengedit dan menyimpan sebagai objek baru
mahasiswa_baru <- edit(mahasiswa)

# Menampilkan data hasil edit
mahasiswa_baru
##   nama nilai
## 1 Ivan    85
## 2 Budi    90
## 3 Andi    80
# Mengedit objek secara langsung
fix(mahasiswa)

# Membuat data frame baru melalui editor
data_baru <- edit(data.frame())

edit() dan fix() digunakan untuk melakukan perubahan data secara langsung melalui tampilan seperti spreadsheet, terutama untuk perubahan data dalam jumlah kecil.