2 + 3 + 7 
## [1] 12
5 - 1 +7
## [1] 11
4*2*7
## [1] 56
10/2/5
## [1] 1
4^3^2
## [1] 262144

a <- 105  # Membuat variabel 'a' dan mengisinya dengan nilai 105
b <- -5   # Membuat variabel 'b' dan mengisinya dengan nilai -5
c <- a + b  # Membuat variabel 'c' yang berisi hasil penjumlahan 'a' dan 'b'
c  # Menampilkan nilai dari variabel 'c'
## [1] 100
vektor <- c(-1, 0, 1, 2, 3, 4, 5, 6, 7)  # Membuat vektor numerik dengan nilai -1 hingga 7
vektor  # Menampilkan isi vektor 
## [1] -1  0  1  2  3  4  5  6  7

warna <- c("Merah", "Biru", "Hijau", "Merah", "Biru", "Hijau", "Merah", "Hitam")
warna  # Menampilkan isi vektor karakter
## [1] "Merah" "Biru"  "Hijau" "Merah" "Biru"  "Hijau" "Merah" "Hitam"
warna_factor <- factor(warna)  # Mengubah vektor karakter menjadi faktor
str(warna_factor)  # Menampilkan struktur dari faktor 'warna_factor'
##  Factor w/ 4 levels "Biru","Hijau",..: 4 1 2 4 1 2 4 3
table(warna_factor)  # Menampilkan frekuensi masing-masing kategori dalam faktor
## warna_factor
##  Biru Hijau Hitam Merah 
##     2     2     1     3
data_list <- list(
  angka = c(10, 20, 30, 40),
  teks = c("A", "B", "C"),
  kategori = factor(c("Baik", "Sedang", "Buruk"))
)
print(data_list)  # Menampilkan seluruh isi list
## $angka
## [1] 10 20 30 40
## 
## $teks
## [1] "A" "B" "C"
## 
## $kategori
## [1] Baik   Sedang Buruk 
## Levels: Baik Buruk Sedang
data_karyawan <- data.frame(
  Nama = c("Andi", "Budi", "Citra", "Dewi", "Virgijawir"),  # Kolom Nama
  Usia = c(25, 30, 27, 35, 20),                   # Kolom Usia
  Pekerjaan = factor(c("Pegawai", "Wirausaha", "Mahasiswa", "Pegawai", "Silverman"))  # Kolom Pekerjaan
)
print(data_karyawan)  # Menampilkan seluruh isi dataframe
##         Nama Usia Pekerjaan
## 1       Andi   25   Pegawai
## 2       Budi   30 Wirausaha
## 3      Citra   27 Mahasiswa
## 4       Dewi   35   Pegawai
## 5 Virgijawir   20 Silverman
summary(data_karyawan)  # Menampilkan ringkasan statistik dari dataframe
##      Nama                Usia          Pekerjaan
##  Length:5           Min.   :20.0   Mahasiswa:1  
##  Class :character   1st Qu.:25.0   Pegawai  :2  
##  Mode  :character   Median :27.0   Silverman:1  
##                     Mean   :27.4   Wirausaha:1  
##                     3rd Qu.:30.0                
##                     Max.   :35.0
array_data <- array(1:24, dim = c(3, 4, 2))  # Membuat array dengan dimensi 3x4x2
print(array_data)  # Menampilkan isi array
## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24
dim(array_data)  # Menampilkan dimensi dari array
## [1] 3 4 2
nilai <- c(90, 85, NA, 75, 80, NA, 95, 111)  # Membuat vektor dengan beberapa nilai NA

# Mengecek nilai yang hilang
is.na(nilai)  # Mengecek apakah ada nilai NA dalam vektor
## [1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE
# Menghitung jumlah nilai NA dalam vektor
sum(is.na(nilai))  # Menghitung total nilai NA dalam vektor
## [1] 2
x1 <- seq(0, 15, length=5)  # Membuat sequence dari 0 hingga 15 dengan 5 elemen
x1  # Menampilkan sequence
## [1]  0.00  3.75  7.50 11.25 15.00

{r8 x2 <- seq(0,15,length=8) # Membuat deret angka dengan 6 elemen x2

x3 <- seq(0,15,length=7)  # Membuat deret angka dengan 7 elemen
x3
## [1]  0.0  2.5  5.0  7.5 10.0 12.5 15.0
round(x3)  # Membulatkan nilai dalam 'x3' ke bilangan bulat terdekat
## [1]  0  2  5  8 10 12 15
floor(x3)  # Membulatkan nilai dalam 'x3' ke bawah
## [1]  0  2  5  7 10 12 15
ceiling(x3)  # Membulatkan nilai dalam 'x3' ke atas
## [1]  0  3  5  8 10 13 15
rep(c("A", "B", "C"), 5)  # Mengulang vektor "A", "B", "C" sebanyak 5 kali
##  [1] "A" "B" "C" "A" "B" "C" "A" "B" "C" "A" "B" "C" "A" "B" "C"
rep(c("A", "B", "C"), each=5)  # Mengulang setiap elemen vektor "A", "B", "C" sebanyak 5 kali
##  [1] "A" "A" "A" "A" "A" "B" "B" "B" "B" "B" "C" "C" "C" "C" "C"
rep(c("A", "B", "C"), each=2, 5)  # Mengulang setiap elemen vektor "A", "B", "C" sebanyak 2 kali, dan seluruhnya diulang 5 kali
##  [1] "A" "A" "B" "B" "C" "C" "A" "A" "B" "B" "C" "C" "A" "A" "B" "B" "C" "C" "A"
## [20] "A" "B" "B" "C" "C" "A" "A" "B" "B" "C" "C"
rep(1:5, 5)  # Mengulang vektor 1 hingga 5 sebanyak 5 kali
##  [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
rep(1:5, each=5)  # Mengulang setiap elemen vektor 1 hingga 5 sebanyak 5 kali
##  [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5
rep(1:5, each=2, 5)  # Mengulang setiap elemen vektor 1 hingga 5 sebanyak 2 kali, dan seluruhnya diulang 5 kali
##  [1] 1 1 2 2 3 3 4 4 5 5 1 1 2 2 3 3 4 4 5 5 1 1 2 2 3 3 4 4 5 5 1 1 2 2 3 3 4 4
## [39] 5 5 1 1 2 2 3 3 4 4 5 5
# Membuat data x dan y
x <- c(3, 4, 5, 6)  # Membuat vektor x
y <- c(2, 3, 4, 5, 6, 6)  # Membuat vektor y
# Menghitung nilai statistik dasar
min(x)  # Menghitung nilai minimum dari vektor x
## [1] 3
max(y)  # Menghitung nilai maksimum dari vektor y
## [1] 6
mean(x) # Menghitung rata-rata dari vektor x
## [1] 4.5
var(y)  # Menghitung variansi dari vektor y
## [1] 2.666667
cor(x, y[1:length(x)])  # Menghitung korelasi antara vektor x dan y (panjang harus sama)
## [1] 1
# Menentukan range (jangkauan nilai)
range(x)  # Menghitung range dari vektor x
## [1] 3 6
range(y)  # Menghitung range dari vektor y
## [1] 2 6
# Simulasi pelemparan koin (0 = ekor, 1 = kepala)
set.seed(123)  # Mengatur seed untuk hasil yang konsisten
sample(0:1, 30, replace = TRUE)  # Simulasi pelemparan koin sebanyak 30 kali
##  [1] 0 0 0 1 0 1 1 1 0 0 1 1 1 0 1 0 1 0 0 0 0 1 0 0 0 0 1 1 0 1
# Simulasi pengambilan sampel huruf "A" dan "G" sebanyak 15 kali
sample(c("A", "G"), 15, replace = TRUE)  # Simulasi pengambilan sampel huruf "A" dan "G"
##  [1] "A" "G" "A" "G" "G" "A" "A" "A" "A" "G" "A" "G" "G" "A" "A"
# Simulasi pelemparan dadu sebanyak 30 kali
sample(1:6, 30, replace = TRUE)  # Simulasi pelemparan dadu sebanyak 30 kali
##  [1] 1 1 2 3 4 5 5 3 6 1 2 5 5 4 5 2 1 1 3 1 6 5 1 2 4 4 6 6 3 6
library(dplyr)
## 
## 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(data.table)
## 
## Attaching package: 'data.table'
## The following objects are masked from 'package:dplyr':
## 
##     between, first, last
library(ggplot2)
data <- tbl_df(iris)
## Warning: `tbl_df()` was deprecated in dplyr 1.0.0.
## ℹ Please use `tibble::as_tibble()` instead.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
class(data)
## [1] "tbl_df"     "tbl"        "data.frame"
data
## # A tibble: 150 × 5
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##           <dbl>       <dbl>        <dbl>       <dbl> <fct>  
##  1          5.1         3.5          1.4         0.2 setosa 
##  2          4.9         3            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           3.6          1.4         0.2 setosa 
##  6          5.4         3.9          1.7         0.4 setosa 
##  7          4.6         3.4          1.4         0.3 setosa 
##  8          5           3.4          1.5         0.2 setosa 
##  9          4.4         2.9          1.4         0.2 setosa 
## 10          4.9         3.1          1.5         0.1 setosa 
## # ℹ 140 more rows
data_slice <- slice(data, 1:10)
data_slice
## # A tibble: 10 × 5
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##           <dbl>       <dbl>        <dbl>       <dbl> <fct>  
##  1          5.1         3.5          1.4         0.2 setosa 
##  2          4.9         3            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           3.6          1.4         0.2 setosa 
##  6          5.4         3.9          1.7         0.4 setosa 
##  7          4.6         3.4          1.4         0.3 setosa 
##  8          5           3.4          1.5         0.2 setosa 
##  9          4.4         2.9          1.4         0.2 setosa 
## 10          4.9         3.1          1.5         0.1 setosa
arrange(data_slice, desc(data_slice$Sepal.Length))
## # A tibble: 10 × 5
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##           <dbl>       <dbl>        <dbl>       <dbl> <fct>  
##  1          5.4         3.9          1.7         0.4 setosa 
##  2          5.1         3.5          1.4         0.2 setosa 
##  3          5           3.6          1.4         0.2 setosa 
##  4          5           3.4          1.5         0.2 setosa 
##  5          4.9         3            1.4         0.2 setosa 
##  6          4.9         3.1          1.5         0.1 setosa 
##  7          4.7         3.2          1.3         0.2 setosa 
##  8          4.6         3.1          1.5         0.2 setosa 
##  9          4.6         3.4          1.4         0.3 setosa 
## 10          4.4         2.9          1.4         0.2 setosa
datatable <- data.table(iris)
datatable
##      Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
##             <num>       <num>        <num>       <num>    <fctr>
##   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
##  ---                                                            
## 146:          6.7         3.0          5.2         2.3 virginica
## 147:          6.3         2.5          5.0         1.9 virginica
## 148:          6.5         3.0          5.2         2.0 virginica
## 149:          6.2         3.4          5.4         2.3 virginica
## 150:          5.9         3.0          5.1         1.8 virginica
datatable$new_col <- datatable$Species
datatable$new_col
##   [1] setosa     setosa     setosa     setosa     setosa     setosa    
##   [7] setosa     setosa     setosa     setosa     setosa     setosa    
##  [13] setosa     setosa     setosa     setosa     setosa     setosa    
##  [19] setosa     setosa     setosa     setosa     setosa     setosa    
##  [25] setosa     setosa     setosa     setosa     setosa     setosa    
##  [31] setosa     setosa     setosa     setosa     setosa     setosa    
##  [37] setosa     setosa     setosa     setosa     setosa     setosa    
##  [43] setosa     setosa     setosa     setosa     setosa     setosa    
##  [49] setosa     setosa     versicolor versicolor versicolor versicolor
##  [55] versicolor versicolor versicolor versicolor versicolor versicolor
##  [61] versicolor versicolor versicolor versicolor versicolor versicolor
##  [67] versicolor versicolor versicolor versicolor versicolor versicolor
##  [73] versicolor versicolor versicolor versicolor versicolor versicolor
##  [79] versicolor versicolor versicolor versicolor versicolor versicolor
##  [85] versicolor versicolor versicolor versicolor versicolor versicolor
##  [91] versicolor versicolor versicolor versicolor versicolor versicolor
##  [97] versicolor versicolor versicolor versicolor virginica  virginica 
## [103] virginica  virginica  virginica  virginica  virginica  virginica 
## [109] virginica  virginica  virginica  virginica  virginica  virginica 
## [115] virginica  virginica  virginica  virginica  virginica  virginica 
## [121] virginica  virginica  virginica  virginica  virginica  virginica 
## [127] virginica  virginica  virginica  virginica  virginica  virginica 
## [133] virginica  virginica  virginica  virginica  virginica  virginica 
## [139] virginica  virginica  virginica  virginica  virginica  virginica 
## [145] virginica  virginica  virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica
setkey(datatable, Species)
key(datatable)
## [1] "Species"
datatable[,.(mean=mean(Sepal.Length), IQR=IQR(Sepal.Length), median=median(Sepal.Length)), by=Species]
## Key: <Species>
##       Species  mean   IQR median
##        <fctr> <num> <num>  <num>
## 1:     setosa 5.006 0.400    5.0
## 2: versicolor 5.936 0.700    5.9
## 3:  virginica 6.588 0.675    6.5
plot_data <- ggplot(data,aes(x=Sepal.Length, y=Sepal.Width)) + geom_point(aes(colour=Species)) 
plot_data

Latihan Soal
1. Ketikkan perintah di bawah ini dan berikan pernyataan apa saja yang dapat kalian peroleh dari perintah tersebut!
r nama_vector <- c(5, FALSE, "true", "8.3", "Statistika") nama_vector
## [1] "5" "FALSE" "true" "8.3" "Statistika" Pernyataan yang dapat diperoleh:
Vector hanya dapat memiliki satu tipe data, sehingga semua elemen akan dikonversi ke tipe data yang paling umum. Dalam hal ini, semuanya dikonversi menjadi karakter (character). Nilai 5 dan FALSE akan berubah menjadi “5” dan “FALSE” sebagai string. TRUE tetap berupa string “true”, dan “8.3” juga tetap string. “Statistika” juga berupa string.
  1. Membuat List
contoh_list <- list(5, FALSE, "true", "8.3", "Statistika")
contoh_list
## [[1]]
## [1] 5
## 
## [[2]]
## [1] FALSE
## 
## [[3]]
## [1] "true"
## 
## [[4]]
## [1] "8.3"
## 
## [[5]]
## [1] "Statistika"

Perbedaan List dan Vector:

Vector harus memiliki elemen dengan tipe data yang sama (dalam contoh sebelumnya, semua dikonversi menjadi character). List dapat menyimpan elemen dengan tipe data yang berbeda (integer, logical, character, dll.). Pemanggilan elemen dalam list menggunakan [[ ]], sedangkan dalam vector menggunakan [ ].


  1. Membuat Data Frame kelompok_kkn
kelompok_kkn <- data.frame(
  nama = c("Andi", "Budi", "Citra", "Dewi", "Eka", "Fajar", "Gita", "Hadi", "Indah", "Joko"),
  nim = c("210001", "210002", "210003", "210004", "210005", "210006", "210007", "210008", "210009", "210010"),
  prodi = c("Statistika", "Matematika", "Fisika", "Kimia", "Biologi", 
            "Informatika", "Statistika", "Matematika", "Fisika", "Kimia")
)
# Memanggil seluruh data frame
kelompok_kkn
##     nama    nim       prodi
## 1   Andi 210001  Statistika
## 2   Budi 210002  Matematika
## 3  Citra 210003      Fisika
## 4   Dewi 210004       Kimia
## 5    Eka 210005     Biologi
## 6  Fajar 210006 Informatika
## 7   Gita 210007  Statistika
## 8   Hadi 210008  Matematika
## 9  Indah 210009      Fisika
## 10  Joko 210010       Kimia
# Memanggil kolom tertentu
kelompok_kkn$nama  # Mengambil seluruh nama
##  [1] "Andi"  "Budi"  "Citra" "Dewi"  "Eka"   "Fajar" "Gita"  "Hadi"  "Indah"
## [10] "Joko"
kelompok_kkn$nim   # Mengambil seluruh NIM
##  [1] "210001" "210002" "210003" "210004" "210005" "210006" "210007" "210008"
##  [9] "210009" "210010"
# Memanggil baris tertentu
kelompok_kkn[1, ]   # Baris pertama
##   nama    nim      prodi
## 1 Andi 210001 Statistika
kelompok_kkn[5, ]   # Baris kelima
##   nama    nim   prodi
## 5  Eka 210005 Biologi
# Memanggil elemen tertentu
kelompok_kkn[3, 2]  # Baris ke-3, Kolom ke-2 (NIM dari Citra)
## [1] "210003"
# Menggunakan subset berdasarkan kondisi
subset(kelompok_kkn, prodi == "Statistika")
##   nama    nim      prodi
## 1 Andi 210001 Statistika
## 7 Gita 210007 Statistika

Perbedaan Cara Pemanggilan:

Vector: Bisa dipanggil langsung dengan indeks [ ]. List: Menggunakan [[ ]] untuk elemen spesifik. Data Frame: Bisa dipanggil dengan indeks [row, column]. Bisa dipanggil dengan $nama_kolom untuk seluruh isi kolom. Bisa menggunakan subset() untuk penyaringan data berdasarkan kondisi.


  1. Data Frame dengan Missing Values
kelompok_kkn_na <- data.frame(
  nama = c("Andi", "Budi", "Citra", "Dewi", NA, "Fajar", "Gita", "Hadi", "Indah", "Joko"),
  nim = c("210001", NA, "210003", "210004", "210005", "210006", "210007", NA, "210009", "210010"),
  prodi = c("Statistika", "Matematika", "Fisika", NA, "Biologi", 
            "Informatika", "Statistika", "Matematika", "Fisika", "Kimia")
)

# Mencari posisi missing values
is.na(kelompok_kkn_na)
##        nama   nim prodi
##  [1,] FALSE FALSE FALSE
##  [2,] FALSE  TRUE FALSE
##  [3,] FALSE FALSE FALSE
##  [4,] FALSE FALSE  TRUE
##  [5,]  TRUE FALSE FALSE
##  [6,] FALSE FALSE FALSE
##  [7,] FALSE FALSE FALSE
##  [8,] FALSE  TRUE FALSE
##  [9,] FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE
# Menampilkan baris yang mengandung NA
kelompok_kkn_na[is.na(kelompok_kkn_na$nama), ]
##   nama    nim   prodi
## 5 <NA> 210005 Biologi
kelompok_kkn_na[is.na(kelompok_kkn_na$nim), ]
##   nama  nim      prodi
## 2 Budi <NA> Matematika
## 8 Hadi <NA> Matematika
kelompok_kkn_na[is.na(kelompok_kkn_na$prodi), ]
##   nama    nim prodi
## 4 Dewi 210004  <NA>

Kesimpulan:

is.na() digunakan untuk mendeteksi NA dalam data frame. Bisa digunakan dalam indexing untuk menampilkan baris dengan NA. Data frame bisa memiliki missing values, berbeda dengan vector yang biasanya tidak mendukung NA dengan baik.