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())