6.1 Lists

Lst <- list(
  name = "Fred",
  wife = "Mary",
  no.children = 3,
  child.ages = c(4, 7, 9)
)

#mengakses komponen berdasarkan nomor

Lst[[1]]
## [1] "Fred"
Lst[[2]]
## [1] "Mary"
Lst[[3]]
## [1] 3
Lst[[4]]
## [1] 4 7 9

#mengakses elemen pertama dari child.ages

Lst[[4]][1]
## [1] 4

#melihat jumlah komponen

length(Lst)
## [1] 4

#mengakses komponen berdasarkan nama

Lst$name
## [1] "Fred"
Lst$wife
## [1] "Mary"
Lst$child.ages[1]
## [1] 4

#mengakses menggunakan nama di dalam [[]]

Lst[["name"]]
## [1] "Fred"

#nama komponen disimpan dalam variabel

x <- "name"
Lst[[x]]
## [1] "Fred"

Perbedaan [[ ]] dan [ ] #[[ ]] memilih satu elemen dari list

Lst[[1]]
## [1] "Fred"

#[ ] menghasilkan sublist

Lst[1]
## $name
## [1] "Fred"

6.2 Constructing and modifying lists

#membuat objek
object_1 <- 10
object_2 <- 20

Lst <- list(
  name_1 = object_1,
  name_2 = object_2
)

Lst
## $name_1
## [1] 10
## 
## $name_2
## [1] 20
#menambahkan komponen baru
Mat <- matrix(1:9, nrow = 3)

Lst[5] <- list(matrix = Mat)

Lst
## $name_1
## [1] 10
## 
## $name_2
## [1] 20
## 
## [[3]]
## NULL
## 
## [[4]]
## NULL
## 
## [[5]]
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
#constructing and modifying lists
Lst <- list(
  name_1 = object_1,
  name_2 = object_2
)

#6.2.1 Concatenating lists

list.A <- list(a = 1, b = 2)
list.B <- list(c = 3, d = 4)
list.C <- list(e = 5, f = 6)

list.ABC <- c(list.A, list.B, list.C)

list.ABC
## $a
## [1] 1
## 
## $b
## [1] 2
## 
## $c
## [1] 3
## 
## $d
## [1] 4
## 
## $e
## [1] 5
## 
## $f
## [1] 6

6.3 Data Frames #membuat objek sebagai komponen

statef <- c("Tennessee", "Tennessee", "Virginia", "Virginia")

incomes <- c(60, 70, 80, 90)

incomef <- c(65, 75, 85, 95)

#6.3.1 membuat data frame

accountants <- data.frame(
  home = statef,
  loot = incomes,
  shot = incomef
)

accountants
##        home loot shot
## 1 Tennessee   60   65
## 2 Tennessee   70   75
## 3  Virginia   80   85
## 4  Virginia   90   95

#melihat struktur data frame

str(accountants)
## 'data.frame':    4 obs. of  3 variables:
##  $ home: chr  "Tennessee" "Tennessee" "Virginia" "Virginia"
##  $ loot: num  60 70 80 90
##  $ shot: num  65 75 85 95

#melihat data

accountants
##        home loot shot
## 1 Tennessee   60   65
## 2 Tennessee   70   75
## 3  Virginia   80   85
## 4  Virginia   90   95

#mengakses kolom

accountants$home
## [1] "Tennessee" "Tennessee" "Virginia"  "Virginia"
accountants$loot
## [1] 60 70 80 90
accountants$shot
## [1] 65 75 85 95

#as.data.frame() -> jika sudah memiliki list

mylist <- list(
  name = c("A", "B", "C"),
  age = c(20, 21, 22)
)

mydata <- as.data.frame(mylist)

mydata
##   name age
## 1    A  20
## 2    B  21
## 3    C  22

#6.3.2 attach() and detach()

lentils <- data.frame(
  u = c(1, 2, 3),
  v = c(4, 5, 6),
  w = c(7, 8, 9)
)

attach(lentils)

#setelah attach(), variabel dapat dipanggil langsung

u
## [1] 1 2 3
v
## [1] 4 5 6
w
## [1] 7 8 9

#contoh operasi

u <- v + w

perintah tersebut membuat u baru di workspace, bukan langsung mengubah lentils$u.

#untuk mengubah data frame:

lentils$u <- v + w

#lalu detach
detach(lentils)

#6.3.3 Working with Data Frames

Mengumpulkan variabel dari suatu masalah dalam satu data frame. COntoh:

nilai_mhs <- data.frame(
  Nama = c("Radit", "Ivan", "Musyafa"),
  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   Radit  80  85      82.5
## 2    Ivan  70  75      72.5
## 3 Musyafa  90  95      92.5

#6.3.4 Attaching Arbitrary Lists 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

#6.3.5 Managing the Search Path Untuk melihat search path:

search()
##  [1] ".GlobalEnv"        "list_data"         "package:stats"    
##  [4] "package:graphics"  "package:grDevices" "package:utils"    
##  [7] "package:datasets"  "package:methods"   "Autoloads"        
## [10] "package:base"

Contoh:

lentils <- data.frame(
  u = c(1, 2, 3),
  v = c(4, 5, 6),
  w = c(7, 8, 9)
)

attach(lentils)
## The following object is masked _by_ .GlobalEnv:
## 
##     u
search()
##  [1] ".GlobalEnv"        "lentils"           "list_data"        
##  [4] "package:stats"     "package:graphics"  "package:grDevices"
##  [7] "package:utils"     "package:datasets"  "package:methods"  
## [10] "Autoloads"         "package:base"

Melihat isi posisi tertentu:

ls(2)
## [1] "u" "v" "w"

atau

objects(2)
## [1] "u" "v" "w"

Kemudian detach:

detach("lentils")

Cek kembali:

search()
##  [1] ".GlobalEnv"        "list_data"         "package:stats"    
##  [4] "package:graphics"  "package:grDevices" "package:utils"    
##  [7] "package:datasets"  "package:methods"   "Autoloads"        
## [10] "package:base"

7 Reading Data from Files

7.1 The read.table() function Misalnya terdapat file bernama:

houses.data <- "Price Floor Area Rooms Age Cent.heat
52.00 111.0 830 5 6.2 no
54.75 128.0 710 5 7.5 no
57.50 101.0 1000 5 4.2 no
57.50 131.0 690 6 8.8 no
59.75 93.0 900 5 1.9 yes"

membaca file

HousePrice <- read.table(textConnection(houses.data), header = TRUE)

melihat hasil

HousePrice
##   Price Floor Area Rooms Age Cent.heat
## 1 52.00   111  830     5 6.2        no
## 2 54.75   128  710     5 7.5        no
## 3 57.50   101 1000     5 4.2        no
## 4 57.50   131  690     6 8.8        no
## 5 59.75    93  900     5 1.9       yes

7.2 scan() 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(
    "X 125 450",
    "Y 310 820",
    "Z 550 990"
  ),
  file_scan
)

data_scan <- scan(
  file_scan,
  what = list(
    id = "",
    x = 0,
    y = 0
  ),
  quiet = TRUE
)

data_scan
## $id
## [1] "X" "Y" "Z"
## 
## $x
## [1] 125 310 550
## 
## $y
## [1] 450 820 990
data_scan$id
## [1] "X" "Y" "Z"
data_scan$x
## [1] 125 310 550
data_scan$y
## [1] 450 820 990

7.3 Accessing Built-in Datasets 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  
##                 
##                 
## 

#7.3.1 Loading Data from Other R Packages 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

7.4 Editing Data Misalkan terdapat objek:

xold <- data.frame(
  x = c(1, 2, 3),
  y = c(4, 5, 6)
)

untuk mengedit dan menyimpan sebagai objek baru

xnew <- edit(xold)

untuk langsung mengubah objek

fix(xold)

untuk membuat data frame baru melalui spreadsheet editor:

xnew <- edit(data.frame())