R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this: ############################################ # Dasar - Dasar R ############################################# ### assignment ### #Assignment adalah suatu cara untuk memberikan value kepada suatu object. Ada beberapa cara #untuk memberikan assign: #1)A <- b #artinya object A akan diisi dengan nilai b #2)b -> A #sama seperti di no 1 yaitu memberikan nilai kepada si A dengan nilai b meskipun tandanya beda #3)A = b #cara lain untuk memberikan assign bisa dengan pake tanda ‘=’ sama aja seperti ‘<-’

A <- 5 #memberikan assign kepada A dengan nilai 5
paste('cara assign 1 = ', A)
## [1] "cara assign 1 =  5"
A = 5 #memberikan assign kepada A dengan nilai 5
paste('cara assign 2 = ', A)
## [1] "cara assign 2 =  5"
5 -> A #memberikan assign kepada A dengan nilai 5
paste('cara assign 3 = ', A)
## [1] "cara assign 3 =  5"

case-sensitive

#sebagai tambahan informasi di R ini sangat sensitive misalkan ingin memberikan nilai 5 kepada object A. #maka ketika menuliskan A <- 5 tidak automatis bahwa a kecil akan bernilai 5. Artinya sangat sensitive #terhadap penamaan.

A <- 5 
paste('Nilai A = ', A) #nilai A beda dengan a
## [1] "Nilai A =  5"
a <- 10 
paste('Nilai a = ', a) #nilai A beda dengan a
## [1] "Nilai a =  10"

#penamaan object diawali dengan huruf (A-z atau a-z) #tidak bisa pake spasi misal jawa Barat <- 10, harus digabung jadi jawa_barat <-10 #terdapat operator yang sudah digunakan misal TRUE, FALSE, NULL, dll tidak bisa dijadikan penamaan object ############################################# # Objek di R. ############################################# #terdapat beberapa objeck di R yaitu Vector, Matrix, Array, Factor, List, and DataFrame.

vector

a1 <- c(2,4,7,3) #cara 1 membuat vector a1
a1 
## [1] 2 4 7 3
assign("a2",c("2","4","7","3")) #cara 2 membuat vector a2 tidak perlu di define seperti cara 1
a2 
## [1] "2" "4" "7" "3"
#baris bilangan
a3 <- seq(1,10,by=0.5) #cara 3 membuat vector a3 dengan selisih 0.5 dimulai dari 1
a3
##  [1]  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0  7.5  8.0
## [16]  8.5  9.0  9.5 10.0
a4 <- seq(1,10,length.out=12) #cara 4 membuat vector a4 dengan jumlah data point sebanyak 12
a4
##  [1]  1.000000  1.818182  2.636364  3.454545  4.272727  5.090909  5.909091
##  [8]  6.727273  7.545455  8.363636  9.181818 10.000000
#bilangan berulang
a5 <- rep(1,3) #cara 5 membuat vector a5 dengan nilai 1 sebanyak 3 kali 
a5
## [1] 1 1 1
a6 <- rep(1:3,3) #cara 6 membuat vector a6 dengan nilai 1-3 diulangi sebanyak 3 kali
a6
## [1] 1 2 3 1 2 3 1 2 3
a7 <- rep(1:3,1:3) #cara 7 membuat vector a7 perulangan nilai sesuai dengan posisinya
a7
## [1] 1 2 2 3 3 3
a8 <- rep(1:3,rep(2,3)) #cara 8 membuat vector a8 
a8
## [1] 1 1 2 2 3 3
a9 <- rep(1:3,each=2) #cara 9 membuat vector a9 sama seperti a8 dengan setiap nilai diulang 2 kali
a9
## [1] 1 1 2 2 3 3
#karakter berpola
a10 <- paste("A", 1:10, sep="") #cara 10 membuat vector a10
a10
##  [1] "A1"  "A2"  "A3"  "A4"  "A5"  "A6"  "A7"  "A8"  "A9"  "A10"
a11 <- paste("A", rep(1:10), sep="") #cara 11 membuat vector a11 seperti cara 10
a11
##  [1] "A1"  "A2"  "A3"  "A4"  "A5"  "A6"  "A7"  "A8"  "A9"  "A10"
a12 <- paste0("A",1:10) #cara 12 membuat vector a12
a12
##  [1] "A1"  "A2"  "A3"  "A4"  "A5"  "A6"  "A7"  "A8"  "A9"  "A10"
a13 <- paste("A",1:10,sep='-') #cara 13 membuat vector a13
a13
##  [1] "A-1"  "A-2"  "A-3"  "A-4"  "A-5"  "A-6"  "A-7"  "A-8"  "A-9"  "A-10"
a14 <- paste0("A",a8) #cara 14 membuat vector a14
a14
## [1] "A1" "A1" "A2" "A2" "A3" "A3"
#akses vector
a2[3] #mengambil value di index ke 3 pada vector a2
## [1] "7"
a3[10:15] #mengambil value di index ke 10 s/d 15 pada vector a3
## [1] 5.5 6.0 6.5 7.0 7.5 8.0
a10[c(4,7,9)] #mengambil value di index ke 4, 7 dan 9 vector a10
## [1] "A4" "A7" "A9"
a13[-c(1:2)] #membuang value di index ke 1 dan 2 pada vector a13
## [1] "A-3"  "A-4"  "A-5"  "A-6"  "A-7"  "A-8"  "A-9"  "A-10"
length(a4) #jumlah index pada vector a4
## [1] 12
#latihan 1
c("la","ye")[rep(c(1,2,2,1),times=4)]
##  [1] "la" "ye" "ye" "la" "la" "ye" "ye" "la" "la" "ye" "ye" "la" "la" "ye" "ye"
## [16] "la"
c("la","ye")[rep(rep(1:2,each=3),2)]
##  [1] "la" "la" "la" "ye" "ye" "ye" "la" "la" "la" "ye" "ye" "ye"
#latiahn 2
paste(c("x","y"),1:10,sep='')
##  [1] "x1"  "y2"  "x3"  "y4"  "x5"  "y6"  "x7"  "y8"  "x9"  "y10"
seq(1,28,by=3)
##  [1]  1  4  7 10 13 16 19 22 25 28

Matrix

a14 <- 1:12 #membuat matriks baris 1 s/d 12
a14
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12
b1 <- matrix(a14,3,4) #membentuk matrix 3 x 4 pake data a14
b1
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
b2 <- matrix(a14,3,4,byrow=TRUE) #sama seperti b1 bedanya diisi baris pertama
b2
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
b3 <- matrix(1:10,4,4) #membentuk matrix 4 x 4 dengan value 1 s/d 10 dimulai dari kolom 1 - kolom ke 4
## Warning in matrix(1:10, 4, 4): data length [10] is not a sub-multiple or
## multiple of the number of rows [4]
b3
##      [,1] [,2] [,3] [,4]
## [1,]    1    5    9    3
## [2,]    2    6   10    4
## [3,]    3    7    1    5
## [4,]    4    8    2    6
b4 <- matrix(1:10,4,5) #membentuk matrix 4 x 5 dengan value 1 s/d 10 dimulai dari kolom 1 - kolom ke 5
b4
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    5    9    3    7
## [2,]    2    6   10    4    8
## [3,]    3    7    1    5    9
## [4,]    4    8    2    6   10
b5 <- a14 #assign matrix baris a14 ke b5
b5
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12
dim(b5)<-c(6,2) #merubah objek vector ke matrix
dim(b5)
## [1] 6 2
b6 <- matrix(1:4,2) #membentuk matrix 2 x 2, jika tidak dimasukan nilai satunya
b6
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
b7 <- matrix(6:9,2) #membentuk matrix 2 x 2, jika tidak dimasukan nilai satunya
b7
##      [,1] [,2]
## [1,]    6    8
## [2,]    7    9
b8 <- rbind(b6,b7) #gabung baris
b8
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## [3,]    6    8
## [4,]    7    9
b9 <- cbind(b7,b6) #gabung kolom
b9
##      [,1] [,2] [,3] [,4]
## [1,]    6    8    1    3
## [2,]    7    9    2    4
dim(b8) #dimensi row and col pada matrix b8
## [1] 4 2
dim(b9) #dimensi row and col pada matrix b9
## [1] 2 4
dim(a14) #dimensi row and col pada matrix a14
## NULL
length(b3) #total data pada matrix b3 
## [1] 16
#akses matrix
b2
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
b2[2,3] #ambil value di indeks row = 2, col = 3
## [1] 7
b2[2,2:4] #ambil value di indeks row = 2, col = 2,3,4
## [1] 6 7 8
b2[1:2,] #ambil value di indeks row = 1,2, col = semua kolom
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
b2[c(1,3),-2] #ambil value di indeks row = 1 dan 3, col = exclude kolom 2
##      [,1] [,2] [,3]
## [1,]    1    3    4
## [2,]    9   11   12
b2[10] #ambil value di row=1, col = 4
## [1] 4

Array

c1 <- array(a14,dim=c(2,2,3))
c1
## , , 1
## 
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## , , 2
## 
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
## 
## , , 3
## 
##      [,1] [,2]
## [1,]    9   11
## [2,]   10   12
c2 <- array(a14,dim=c(2,1,2,3))
c2
## , , 1, 1
## 
##      [,1]
## [1,]    1
## [2,]    2
## 
## , , 2, 1
## 
##      [,1]
## [1,]    3
## [2,]    4
## 
## , , 1, 2
## 
##      [,1]
## [1,]    5
## [2,]    6
## 
## , , 2, 2
## 
##      [,1]
## [1,]    7
## [2,]    8
## 
## , , 1, 3
## 
##      [,1]
## [1,]    9
## [2,]   10
## 
## , , 2, 3
## 
##      [,1]
## [1,]   11
## [2,]   12
c3 <- array(a14,dim=c(1,2,4,2))
c3
## , , 1, 1
## 
##      [,1] [,2]
## [1,]    1    2
## 
## , , 2, 1
## 
##      [,1] [,2]
## [1,]    3    4
## 
## , , 3, 1
## 
##      [,1] [,2]
## [1,]    5    6
## 
## , , 4, 1
## 
##      [,1] [,2]
## [1,]    7    8
## 
## , , 1, 2
## 
##      [,1] [,2]
## [1,]    9   10
## 
## , , 2, 2
## 
##      [,1] [,2]
## [1,]   11   12
## 
## , , 3, 2
## 
##      [,1] [,2]
## [1,]    1    2
## 
## , , 4, 2
## 
##      [,1] [,2]
## [1,]    3    4
c4 <- array(a14,dim=c(3,4))
c4
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
#akses array
c2[,,1,] #lembar 1 dari c2
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
c2[,,,2] #buku ke 2 dari c2
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
c2[,,1,3] #lembar ke 1 buku ke 3 dari c2
## [1]  9 10

Factor

a15 <- c("A","B","AB","O") #membuat vector
a15
## [1] "A"  "B"  "AB" "O"
d1 <- factor(a15) #transform tipe data ke skala pengukuran nominal
d1
## [1] A  B  AB O 
## Levels: A AB B O
d2 <- factor(a15,levels=c("O","A","B","AB")) #mengubah posisi level
d2
## [1] A  B  AB O 
## Levels: O A B AB
levels(d2) #melihat unique kategorik
## [1] "O"  "A"  "B"  "AB"
a16 <- c("SD","SMP","SMA") #membuat vector
a16
## [1] "SD"  "SMP" "SMA"
d3 <- ordered(a16) #transform tipe data ke skala pengukuran ordinal
d3
## [1] SD  SMP SMA
## Levels: SD < SMA < SMP
d4 <- ordered(a16, levels=a16)
d4
## [1] SD  SMP SMA
## Levels: SD < SMP < SMA
d5 <- factor(a16, levels=a16, ordered=TRUE)
d5
## [1] SD  SMP SMA
## Levels: SD < SMP < SMA
levels(d4)
## [1] "SD"  "SMP" "SMA"
#akses factor
d1[2] #mengambil indeks ke 2 pada vector d1
## [1] B
## Levels: A AB B O
d4[2:3] #mengambil indeks ke 2 dan 3 pada vector d4
## [1] SMP SMA
## Levels: SD < SMP < SMA

List

a1; b2; c1; d2 #bisa dikasih tanda ; kalo untuk menampilkan, tidak perlu dibuat per line
## [1] 2 4 7 3
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
## , , 1
## 
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## , , 2
## 
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
## 
## , , 3
## 
##      [,1] [,2]
## [1,]    9   11
## [2,]   10   12
## [1] A  B  AB O 
## Levels: O A B AB
e1 <- list(a1,b2,c1,d2) #membuat sekumpulan assignment menjadi list
e1
## [[1]]
## [1] 2 4 7 3
## 
## [[2]]
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
## 
## [[3]]
## , , 1
## 
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## , , 2
## 
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
## 
## , , 3
## 
##      [,1] [,2]
## [1,]    9   11
## [2,]   10   12
## 
## 
## [[4]]
## [1] A  B  AB O 
## Levels: O A B AB
e2 <- list(vect=a1,mat=b2,array=c1,fac=d2)
e2
## $vect
## [1] 2 4 7 3
## 
## $mat
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
## 
## $array
## , , 1
## 
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## , , 2
## 
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
## 
## , , 3
## 
##      [,1] [,2]
## [1,]    9   11
## [2,]   10   12
## 
## 
## $fac
## [1] A  B  AB O 
## Levels: O A B AB
#akses list
e1[[1]]
## [1] 2 4 7 3
e2$fac
## [1] A  B  AB O 
## Levels: O A B AB
e2[2]
## $mat
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
e1[c(2,4)]
## [[1]]
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
## 
## [[2]]
## [1] A  B  AB O 
## Levels: O A B AB
dim(e2)
## NULL
length(e2)
## [1] 4
names(e2)
## [1] "vect"  "mat"   "array" "fac"

DataFrame

a17 <- 11:15
a17
## [1] 11 12 13 14 15
d5 <- factor(LETTERS[6:10])
d5
## [1] F G H I J
## Levels: F G H I J
f1 <- data.frame(d5,a17)
f1
##   d5 a17
## 1  F  11
## 2  G  12
## 3  H  13
## 4  I  14
## 5  J  15
#akses data frame
f1[1,2]
## [1] 11
f1[3,]
##   d5 a17
## 3  H  13
f1$d5
## [1] F G H I J
## Levels: F G H I J
f1[,"a17"]
## [1] 11 12 13 14 15
colnames(f1)
## [1] "d5"  "a17"
str(f1)
## 'data.frame':    5 obs. of  2 variables:
##  $ d5 : Factor w/ 5 levels "F","G","H","I",..: 1 2 3 4 5
##  $ a17: int  11 12 13 14 15
summary(f1)
##  d5         a17    
##  F:1   Min.   :11  
##  G:1   1st Qu.:12  
##  H:1   Median :13  
##  I:1   Mean   :13  
##  J:1   3rd Qu.:14  
##        Max.   :15

latihan 3

#Seorang peneliti merancang sebuah perancangan percobaan #RAKL dengan 4 perlakuan dan 3 kelompok (anggaplah respon #percobaan berupa baris bilangan). Bantulah peneliti tersebut #untuk membuat raw data seperti output sebagai berikut!

perl <- paste("P",rep(c(1:4),each=3),sep="")
kel <- rep(c(1:3),times=4)
resp <- seq(1,23,by=2)
data1 <- data.frame(perl,kel,resp)
data1 
##    perl kel resp
## 1    P1   1    1
## 2    P1   2    3
## 3    P1   3    5
## 4    P2   1    7
## 5    P2   2    9
## 6    P2   3   11
## 7    P3   1   13
## 8    P3   2   15
## 9    P3   3   17
## 10   P4   1   19
## 11   P4   2   21
## 12   P4   3   23

operator-operator lain

is.vector() -> apakah objec bentuk vector?

is.matrix() -> apakah objec bentuk matrix?

is.array() -> apakah objec bentuk array?

is.factor() -> apakah objec tipe factor?

is.list() -> apakah objec list?

is.data.frame() -> apakah objec dataframe?

as.vector() -> operator membuat vector

as.matrix() -> operator membuat matrix

as.array() -> operator membentuk tipe array

as.factor() -> operator mengubah tipe data menjadi factor

as.list() -> operator membentuk list

as.data.frame() -> operator membentuk dataframe

#======================================================================================= #Manajemen Data Frame #======================================================================================= ### membuat data frame ###

#create vector
id_mhw = paste("id", rep(1:10), sep="")
id_mhw
##  [1] "id1"  "id2"  "id3"  "id4"  "id5"  "id6"  "id7"  "id8"  "id9"  "id10"
stat = c(86,87,90,91,92,78,98,77,89,80)
stat
##  [1] 86 87 90 91 92 78 98 77 89 80
math = c(79,92,87,87,90,79,92,80,85,82)
math
##  [1] 79 92 87 87 90 79 92 80 85 82
#membuat dataframe
data = data.frame(id_mhw, stat, math)
data
##    id_mhw stat math
## 1     id1   86   79
## 2     id2   87   92
## 3     id3   90   87
## 4     id4   91   87
## 5     id5   92   90
## 6     id6   78   79
## 7     id7   98   92
## 8     id8   77   80
## 9     id9   89   85
## 10   id10   80   82

membuat variabel/kolom baru

#Dilakukan seperti membuat vektor (dengan indeks atau operasi seleksi)

#latihan 1
#Pada data1, buatlah peubah 'baru1' yang berisi nilai dari 12 sampai 1 secara berurutan
data1$baru1 <- 12:1
data1
##    perl kel resp baru1
## 1    P1   1    1    12
## 2    P1   2    3    11
## 3    P1   3    5    10
## 4    P2   1    7     9
## 5    P2   2    9     8
## 6    P2   3   11     7
## 7    P3   1   13     6
## 8    P3   2   15     5
## 9    P3   3   17     4
## 10   P4   1   19     3
## 11   P4   2   21     2
## 12   P4   3   23     1
#import library
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
#cara 1
data$paralel = factor(rep(1:2,5))
data
##    id_mhw stat math paralel
## 1     id1   86   79       1
## 2     id2   87   92       2
## 3     id3   90   87       1
## 4     id4   91   87       2
## 5     id5   92   90       1
## 6     id6   78   79       2
## 7     id7   98   92       1
## 8     id8   77   80       2
## 9     id9   89   85       1
## 10   id10   80   82       2
#cara 2
cara_2 = data
cara_2[,'pararel1'] <- factor(rep(1:2,5))
cara_2
##    id_mhw stat math paralel pararel1
## 1     id1   86   79       1        1
## 2     id2   87   92       2        2
## 3     id3   90   87       1        1
## 4     id4   91   87       2        2
## 5     id5   92   90       1        1
## 6     id6   78   79       2        2
## 7     id7   98   92       1        1
## 8     id8   77   80       2        2
## 9     id9   89   85       1        1
## 10   id10   80   82       2        2
#cara 3
cara_3 <- data %>% mutate('pararel3' = factor(rep(1:2,5)))
cara_3
##    id_mhw stat math paralel pararel3
## 1     id1   86   79       1        1
## 2     id2   87   92       2        2
## 3     id3   90   87       1        1
## 4     id4   91   87       2        2
## 5     id5   92   90       1        1
## 6     id6   78   79       2        2
## 7     id7   98   92       1        1
## 8     id8   77   80       2        2
## 9     id9   89   85       1        1
## 10   id10   80   82       2        2

menambah baris baru

data[nrow(data) + 1,] = c("id11","78", "89", "2") 
data
##    id_mhw stat math paralel
## 1     id1   86   79       1
## 2     id2   87   92       2
## 3     id3   90   87       1
## 4     id4   91   87       2
## 5     id5   92   90       1
## 6     id6   78   79       2
## 7     id7   98   92       1
## 8     id8   77   80       2
## 9     id9   89   85       1
## 10   id10   80   82       2
## 11   id11   78   89       2
data[nrow(data) + 1,] = c("id12","80", "89", "2")
data
##    id_mhw stat math paralel
## 1     id1   86   79       1
## 2     id2   87   92       2
## 3     id3   90   87       1
## 4     id4   91   87       2
## 5     id5   92   90       1
## 6     id6   78   79       2
## 7     id7   98   92       1
## 8     id8   77   80       2
## 9     id9   89   85       1
## 10   id10   80   82       2
## 11   id11   78   89       2
## 12   id12   80   89       2

Subsetting Data (fungsi operator ==, !=, >, >=, <, <=, %in%, duplicated, is,na())

#dilakukan untuk akses sebagian data #membuat ide logic untuk diterapkan dalam vektor logic yang diinginkan

#latihan 2
#dari data1 tersebut ambillah yang termasuk kelompok 1
data2 <- data1[data1$kel == 1,]
data2
##    perl kel resp baru1
## 1    P1   1    1    12
## 4    P2   1    7     9
## 7    P3   1   13     6
## 10   P4   1   19     3
#latihan 3
#dari data1 tersebut ambillah yang termasuk kelompok 1 atau perlakuan p2
data3 <- data1[data1$kel == 1 | data1$perl=='P2',]
data3
##    perl kel resp baru1
## 1    P1   1    1    12
## 4    P2   1    7     9
## 5    P2   2    9     8
## 6    P2   3   11     7
## 7    P3   1   13     6
## 10   P4   1   19     3
#latihan 4
#dari data1 tersebut ambillah amatan yang respon bilangan prima
data4 <- data1[data1$resp %in% c(2,3,5,7,11,13,17,19,23),]
data4
##    perl kel resp baru1
## 2    P1   2    3    11
## 3    P1   3    5    10
## 4    P2   1    7     9
## 6    P2   3   11     7
## 7    P3   1   13     6
## 9    P3   3   17     4
## 10   P4   1   19     3
## 12   P4   3   23     1
#op ==
# cara 1
indeks1 = data$paralel == 1
indeks1
##  [1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE
datas1 = data[indeks1,]
datas1
##   id_mhw stat math paralel
## 1    id1   86   79       1
## 3    id3   90   87       1
## 5    id5   92   90       1
## 7    id7   98   92       1
## 9    id9   89   85       1
# cara 2
datas1 <- data$paralel==1
data[datas1,]
##   id_mhw stat math paralel
## 1    id1   86   79       1
## 3    id3   90   87       1
## 5    id5   92   90       1
## 7    id7   98   92       1
## 9    id9   89   85       1
#op  == |
# cara 1
indeks2 = data$stat == 90 | data$math == 90
indeks2
##  [1] FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
datas2 = data[indeks2,]
datas2
##   id_mhw stat math paralel
## 3    id3   90   87       1
## 5    id5   92   90       1
# cara 2
datas2 <- data$stat == 90 | data$math == 90
data[datas2,]
##   id_mhw stat math paralel
## 3    id3   90   87       1
## 5    id5   92   90       1
#op !=
# cara 1
indeks3 = data$paralel != 2
indeks3
##  [1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE
datas3 = data[indeks3,]
datas3
##   id_mhw stat math paralel
## 1    id1   86   79       1
## 3    id3   90   87       1
## 5    id5   92   90       1
## 7    id7   98   92       1
## 9    id9   89   85       1
# cara 2
datas3 <- data$paralel != 2
data[datas3,]
##   id_mhw stat math paralel
## 1    id1   86   79       1
## 3    id3   90   87       1
## 5    id5   92   90       1
## 7    id7   98   92       1
## 9    id9   89   85       1
#op >=, <=
# cara 1
indeks4 = data$stat >= 80 & data$stat <= 90
indeks4
##  [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE
datas4 = data[indeks4,]
datas4
##    id_mhw stat math paralel
## 1     id1   86   79       1
## 2     id2   87   92       2
## 3     id3   90   87       1
## 9     id9   89   85       1
## 10   id10   80   82       2
## 12   id12   80   89       2
# cara 2
datas4 <- data$stat >=80 & data$math <=90  
data[datas4,]
##    id_mhw stat math paralel
## 1     id1   86   79       1
## 3     id3   90   87       1
## 4     id4   91   87       2
## 5     id5   92   90       1
## 9     id9   89   85       1
## 10   id10   80   82       2
## 12   id12   80   89       2
#op %in%
x1 = 1:5
x1
## [1] 1 2 3 4 5
x2 = 1:3
x2
## [1] 1 2 3
x1 %in% x2
## [1]  TRUE  TRUE  TRUE FALSE FALSE
# cara 1
indeks5 = data$stat %in% c(80,85,90,95)
indeks5
##  [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE
datas5 = data[indeks5,]
datas5
##    id_mhw stat math paralel
## 3     id3   90   87       1
## 10   id10   80   82       2
## 12   id12   80   89       2
# cara 2
datas5 <- data$stat %in% c(80,85,90,95)   
data[datas5,]
##    id_mhw stat math paralel
## 3     id3   90   87       1
## 10   id10   80   82       2
## 12   id12   80   89       2
#op duplicated
# cara 1
indeks6 = duplicated(data$id_mhw)
datas6 = data[indeks6,]
datas6
## [1] id_mhw  stat    math    paralel
## <0 rows> (or 0-length row.names)
# cara 2
datas6 <- duplicated(data$id_mhw)   
data[datas6,]
## [1] id_mhw  stat    math    paralel
## <0 rows> (or 0-length row.names)
#op is,na()
# cara 1
indeks7 = is.na(data$paralel) #cek data kosong di paralel
datas7 = data[indeks7,]
datas7
## [1] id_mhw  stat    math    paralel
## <0 rows> (or 0-length row.names)
#op is,null()
is.null(data) #cek dataframe ada yang null atau tidak
## [1] FALSE
# misal :
data[nrow(data) + 1,] = c("id12","80", "89", "")
## Warning in `[<-.factor`(`*tmp*`, iseq, value = ""): invalid factor level, NA
## generated
data
##    id_mhw stat math paralel
## 1     id1   86   79       1
## 2     id2   87   92       2
## 3     id3   90   87       1
## 4     id4   91   87       2
## 5     id5   92   90       1
## 6     id6   78   79       2
## 7     id7   98   92       1
## 8     id8   77   80       2
## 9     id9   89   85       1
## 10   id10   80   82       2
## 11   id11   78   89       2
## 12   id12   80   89       2
## 13   id12   80   89    <NA>
data <- data[-13,]
data
##    id_mhw stat math paralel
## 1     id1   86   79       1
## 2     id2   87   92       2
## 3     id3   90   87       1
## 4     id4   91   87       2
## 5     id5   92   90       1
## 6     id6   78   79       2
## 7     id7   98   92       1
## 8     id8   77   80       2
## 9     id9   89   85       1
## 10   id10   80   82       2
## 11   id11   78   89       2
## 12   id12   80   89       2

Mengurutkan Data (order(), sort(), which(), rev(), unique())

#dilakukan untuk mengurutkan data berdasarkan beberapa peubah tertentu #dilakukan dengan membuat vektork logika untuk melakukan pengurutan data

#latihan 5
#urutkan data1 tersebut berdasarkan kelompok secara ascending
data5 <- data1[order(data1$kel,decreasing = F),]
data5
##    perl kel resp baru1
## 1    P1   1    1    12
## 4    P2   1    7     9
## 7    P3   1   13     6
## 10   P4   1   19     3
## 2    P1   2    3    11
## 5    P2   2    9     8
## 8    P3   2   15     5
## 11   P4   2   21     2
## 3    P1   3    5    10
## 6    P2   3   11     7
## 9    P3   3   17     4
## 12   P4   3   23     1
#latihan 6
#urutkan data1 tersebut berdasarkan kelompok secara descending
data6 <- data1[order(data1$kel,decreasing = T),]
data6
##    perl kel resp baru1
## 3    P1   3    5    10
## 6    P2   3   11     7
## 9    P3   3   17     4
## 12   P4   3   23     1
## 2    P1   2    3    11
## 5    P2   2    9     8
## 8    P3   2   15     5
## 11   P4   2   21     2
## 1    P1   1    1    12
## 4    P2   1    7     9
## 7    P3   1   13     6
## 10   P4   1   19     3
#latihan 7
#urutkan data1 tersebut berdasarkan kelompok secara ascending dan respon secara descending
data7 <- data1[order(data1$resp,decreasing = T),]
data7
##    perl kel resp baru1
## 12   P4   3   23     1
## 11   P4   2   21     2
## 10   P4   1   19     3
## 9    P3   3   17     4
## 8    P3   2   15     5
## 7    P3   1   13     6
## 6    P2   3   11     7
## 5    P2   2    9     8
## 4    P2   1    7     9
## 3    P1   3    5    10
## 2    P1   2    3    11
## 1    P1   1    1    12
data8 <- data7[order(data7$kel,decreasing = F),] #order by kelompok
data8
##    perl kel resp baru1
## 10   P4   1   19     3
## 7    P3   1   13     6
## 4    P2   1    7     9
## 1    P1   1    1    12
## 11   P4   2   21     2
## 8    P3   2   15     5
## 5    P2   2    9     8
## 2    P1   2    3    11
## 12   P4   3   23     1
## 9    P3   3   17     4
## 6    P2   3   11     7
## 3    P1   3    5    10
#temp table
datas2 <- data
datas2$segment <- c('high','low','low','high','med','med','low','high','med','low','high','low')
datas2$gender <- c('M','M','M','F','F','M','F','F','F','M','F','F')
datas2
##    id_mhw stat math paralel segment gender
## 1     id1   86   79       1    high      M
## 2     id2   87   92       2     low      M
## 3     id3   90   87       1     low      M
## 4     id4   91   87       2    high      F
## 5     id5   92   90       1     med      F
## 6     id6   78   79       2     med      M
## 7     id7   98   92       1     low      F
## 8     id8   77   80       2    high      F
## 9     id9   89   85       1     med      F
## 10   id10   80   82       2     low      M
## 11   id11   78   89       2    high      F
## 12   id12   80   89       2     low      F
# order()
# Simple
datas2
##    id_mhw stat math paralel segment gender
## 1     id1   86   79       1    high      M
## 2     id2   87   92       2     low      M
## 3     id3   90   87       1     low      M
## 4     id4   91   87       2    high      F
## 5     id5   92   90       1     med      F
## 6     id6   78   79       2     med      M
## 7     id7   98   92       1     low      F
## 8     id8   77   80       2    high      F
## 9     id9   89   85       1     med      F
## 10   id10   80   82       2     low      M
## 11   id11   78   89       2    high      F
## 12   id12   80   89       2     low      F
datas2[order(datas2$stat),]
##    id_mhw stat math paralel segment gender
## 8     id8   77   80       2    high      F
## 6     id6   78   79       2     med      M
## 11   id11   78   89       2    high      F
## 10   id10   80   82       2     low      M
## 12   id12   80   89       2     low      F
## 1     id1   86   79       1    high      M
## 2     id2   87   92       2     low      M
## 9     id9   89   85       1     med      F
## 3     id3   90   87       1     low      M
## 4     id4   91   87       2    high      F
## 5     id5   92   90       1     med      F
## 7     id7   98   92       1     low      F
# rumit
datas2[
  order(datas2$segment, 
        (datas2$gender=='M')*as.numeric(datas2$stat),
        (datas2$gender=='F')*as.numeric(datas2$math)
        ),
  ] %>% select(segment, gender, stat, math)
##    segment gender stat math
## 8     high      F   77   80
## 4     high      F   91   87
## 11    high      F   78   89
## 1     high      M   86   79
## 12     low      F   80   89
## 7      low      F   98   92
## 10     low      M   80   82
## 2      low      M   87   92
## 3      low      M   90   87
## 9      med      F   89   85
## 5      med      F   92   90
## 6      med      M   78   79
#rank
datas2
##    id_mhw stat math paralel segment gender
## 1     id1   86   79       1    high      M
## 2     id2   87   92       2     low      M
## 3     id3   90   87       1     low      M
## 4     id4   91   87       2    high      F
## 5     id5   92   90       1     med      F
## 6     id6   78   79       2     med      M
## 7     id7   98   92       1     low      F
## 8     id8   77   80       2    high      F
## 9     id9   89   85       1     med      F
## 10   id10   80   82       2     low      M
## 11   id11   78   89       2    high      F
## 12   id12   80   89       2     low      F
rank(datas2$stat)
##  [1]  6.0  7.0  9.0 10.0 11.0  2.5 12.0  1.0  8.0  4.5  2.5  4.5
datas2$rank = rank(datas2$stat)
datas2[order(datas2$rank),]
##    id_mhw stat math paralel segment gender rank
## 8     id8   77   80       2    high      F  1.0
## 6     id6   78   79       2     med      M  2.5
## 11   id11   78   89       2    high      F  2.5
## 10   id10   80   82       2     low      M  4.5
## 12   id12   80   89       2     low      F  4.5
## 1     id1   86   79       1    high      M  6.0
## 2     id2   87   92       2     low      M  7.0
## 9     id9   89   85       1     med      F  8.0
## 3     id3   90   87       1     low      M  9.0
## 4     id4   91   87       2    high      F 10.0
## 5     id5   92   90       1     med      F 11.0
## 7     id7   98   92       1     low      F 12.0
#sort - mengurutkan
sort(datas2$stat)
##  [1] "77" "78" "78" "80" "80" "86" "87" "89" "90" "91" "92" "98"
x3 <- c(2,4,3,2,7,8) # untuk vektor berlaku
sort(x3)
## [1] 2 2 3 4 7 8
datas2[sort(datas2$stat),] # >>>>>>>>> untuk data frame tidak berlaku
##       id_mhw stat math paralel segment gender rank
## NA      <NA> <NA> <NA>    <NA>    <NA>   <NA>   NA
## NA.1    <NA> <NA> <NA>    <NA>    <NA>   <NA>   NA
## NA.2    <NA> <NA> <NA>    <NA>    <NA>   <NA>   NA
## NA.3    <NA> <NA> <NA>    <NA>    <NA>   <NA>   NA
## NA.4    <NA> <NA> <NA>    <NA>    <NA>   <NA>   NA
## NA.5    <NA> <NA> <NA>    <NA>    <NA>   <NA>   NA
## NA.6    <NA> <NA> <NA>    <NA>    <NA>   <NA>   NA
## NA.7    <NA> <NA> <NA>    <NA>    <NA>   <NA>   NA
## NA.8    <NA> <NA> <NA>    <NA>    <NA>   <NA>   NA
## NA.9    <NA> <NA> <NA>    <NA>    <NA>   <NA>   NA
## NA.10   <NA> <NA> <NA>    <NA>    <NA>   <NA>   NA
## NA.11   <NA> <NA> <NA>    <NA>    <NA>   <NA>   NA
#which - mengurutkan indek bernilai true
which(LETTERS == 'Z')
## [1] 26
datas2
##    id_mhw stat math paralel segment gender rank
## 1     id1   86   79       1    high      M  6.0
## 2     id2   87   92       2     low      M  7.0
## 3     id3   90   87       1     low      M  9.0
## 4     id4   91   87       2    high      F 10.0
## 5     id5   92   90       1     med      F 11.0
## 6     id6   78   79       2     med      M  2.5
## 7     id7   98   92       1     low      F 12.0
## 8     id8   77   80       2    high      F  1.0
## 9     id9   89   85       1     med      F  8.0
## 10   id10   80   82       2     low      M  4.5
## 11   id11   78   89       2    high      F  2.5
## 12   id12   80   89       2     low      F  4.5
which(datas2$stat==80)
## [1] 10 12
datas2[which(datas2$stat==80),]
##    id_mhw stat math paralel segment gender rank
## 10   id10   80   82       2     low      M  4.5
## 12   id12   80   89       2     low      F  4.5
#rev - mengurutkan kebalikan
datas2$id_mhw #vector
##  [1] "id1"  "id2"  "id3"  "id4"  "id5"  "id6"  "id7"  "id8"  "id9"  "id10"
## [11] "id11" "id12"
rev(datas2$id_mhw) #vector
##  [1] "id12" "id11" "id10" "id9"  "id8"  "id7"  "id6"  "id5"  "id4"  "id3" 
## [11] "id2"  "id1"
datas2 #df
##    id_mhw stat math paralel segment gender rank
## 1     id1   86   79       1    high      M  6.0
## 2     id2   87   92       2     low      M  7.0
## 3     id3   90   87       1     low      M  9.0
## 4     id4   91   87       2    high      F 10.0
## 5     id5   92   90       1     med      F 11.0
## 6     id6   78   79       2     med      M  2.5
## 7     id7   98   92       1     low      F 12.0
## 8     id8   77   80       2    high      F  1.0
## 9     id9   89   85       1     med      F  8.0
## 10   id10   80   82       2     low      M  4.5
## 11   id11   78   89       2    high      F  2.5
## 12   id12   80   89       2     low      F  4.5
rev(datas2) #mengurutkan data berdasarkan kolom secara terbalik df
##    rank gender segment paralel math stat id_mhw
## 1   6.0      M    high       1   79   86    id1
## 2   7.0      M     low       2   92   87    id2
## 3   9.0      M     low       1   87   90    id3
## 4  10.0      F    high       2   87   91    id4
## 5  11.0      F     med       1   90   92    id5
## 6   2.5      M     med       2   79   78    id6
## 7  12.0      F     low       1   92   98    id7
## 8   1.0      F    high       2   80   77    id8
## 9   8.0      F     med       1   85   89    id9
## 10  4.5      M     low       2   82   80   id10
## 11  2.5      F    high       2   89   78   id11
## 12  4.5      F     low       2   89   80   id12
datas2
##    id_mhw stat math paralel segment gender rank
## 1     id1   86   79       1    high      M  6.0
## 2     id2   87   92       2     low      M  7.0
## 3     id3   90   87       1     low      M  9.0
## 4     id4   91   87       2    high      F 10.0
## 5     id5   92   90       1     med      F 11.0
## 6     id6   78   79       2     med      M  2.5
## 7     id7   98   92       1     low      F 12.0
## 8     id8   77   80       2    high      F  1.0
## 9     id9   89   85       1     med      F  8.0
## 10   id10   80   82       2     low      M  4.5
## 11   id11   78   89       2    high      F  2.5
## 12   id12   80   89       2     low      F  4.5
datas2[rev(rownames(datas2)),] #mengurutkan data berdasarkan row
##    id_mhw stat math paralel segment gender rank
## 12   id12   80   89       2     low      F  4.5
## 11   id11   78   89       2    high      F  2.5
## 10   id10   80   82       2     low      M  4.5
## 9     id9   89   85       1     med      F  8.0
## 8     id8   77   80       2    high      F  1.0
## 7     id7   98   92       1     low      F 12.0
## 6     id6   78   79       2     med      M  2.5
## 5     id5   92   90       1     med      F 11.0
## 4     id4   91   87       2    high      F 10.0
## 3     id3   90   87       1     low      M  9.0
## 2     id2   87   92       2     low      M  7.0
## 1     id1   86   79       1    high      M  6.0
#unique cari lagi
x <- unique(data$id_mhw) #select id_mhw biar ga double
x
##  [1] "id1"  "id2"  "id3"  "id4"  "id5"  "id6"  "id7"  "id8"  "id9"  "id10"
## [11] "id11" "id12"

Recording data

#digunakan untuk membuat nilai baru dari nilai peubah yang sudah ada #dapat dilakukan secara logical, fungi ifelse(), recode(), dan fungsi lainnya

#latihan8
#lakukanlah recoding pada data8 untuk variable respon dengan kondisi jika respon<15, maka
#code=1,selainnya code = 0
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
data8$code3 <- recode(data8$resp,'1:14=1; else=0')
data8
##    perl kel resp baru1 code3
## 10   P4   1   19     3     0
## 7    P3   1   13     6     1
## 4    P2   1    7     9     1
## 1    P1   1    1    12     1
## 11   P4   2   21     2     0
## 8    P3   2   15     5     0
## 5    P2   2    9     8     1
## 2    P1   2    3    11     1
## 12   P4   3   23     1     0
## 9    P3   3   17     4     0
## 6    P2   3   11     7     1
## 3    P1   3    5    10     1
#logical
data$code1 = 1*(data$stat>=85) + 0*(data$stat<85)
data
##    id_mhw stat math paralel code1
## 1     id1   86   79       1     1
## 2     id2   87   92       2     1
## 3     id3   90   87       1     1
## 4     id4   91   87       2     1
## 5     id5   92   90       1     1
## 6     id6   78   79       2     0
## 7     id7   98   92       1     1
## 8     id8   77   80       2     0
## 9     id9   89   85       1     1
## 10   id10   80   82       2     0
## 11   id11   78   89       2     0
## 12   id12   80   89       2     0
#if
new_segment <- matrix(nrow=length(datas2$segment),ncol=1)
new_segment
##       [,1]
##  [1,]   NA
##  [2,]   NA
##  [3,]   NA
##  [4,]   NA
##  [5,]   NA
##  [6,]   NA
##  [7,]   NA
##  [8,]   NA
##  [9,]   NA
## [10,]   NA
## [11,]   NA
## [12,]   NA
for (i in 1:nrow(datas2)){
  x <- datas2[i,'segment']
  if (x=='high'){new_segment[i] = 'h'}
  else if (x=='med'){new_segment[i]='m'}else{new_segment[i]='l'}
}
datas2$if_segment <- new_segment
datas2
##    id_mhw stat math paralel segment gender rank if_segment
## 1     id1   86   79       1    high      M  6.0          h
## 2     id2   87   92       2     low      M  7.0          l
## 3     id3   90   87       1     low      M  9.0          l
## 4     id4   91   87       2    high      F 10.0          h
## 5     id5   92   90       1     med      F 11.0          m
## 6     id6   78   79       2     med      M  2.5          m
## 7     id7   98   92       1     low      F 12.0          l
## 8     id8   77   80       2    high      F  1.0          h
## 9     id9   89   85       1     med      F  8.0          m
## 10   id10   80   82       2     low      M  4.5          l
## 11   id11   78   89       2    high      F  2.5          h
## 12   id12   80   89       2     low      F  4.5          l
#switch
new_gender <- matrix(nrow=length(datas2$gender),ncol=1)
new_gender
##       [,1]
##  [1,]   NA
##  [2,]   NA
##  [3,]   NA
##  [4,]   NA
##  [5,]   NA
##  [6,]   NA
##  [7,]   NA
##  [8,]   NA
##  [9,]   NA
## [10,]   NA
## [11,]   NA
## [12,]   NA
for (i in 1:nrow(datas2)){
  x <- datas2[i,'gender']
  new_gender[i] <- switch(x,"M" = "Male","F" = "Female")
}
datas2$switch_gender <- new_gender
datas2
##    id_mhw stat math paralel segment gender rank if_segment switch_gender
## 1     id1   86   79       1    high      M  6.0          h          Male
## 2     id2   87   92       2     low      M  7.0          l          Male
## 3     id3   90   87       1     low      M  9.0          l          Male
## 4     id4   91   87       2    high      F 10.0          h        Female
## 5     id5   92   90       1     med      F 11.0          m        Female
## 6     id6   78   79       2     med      M  2.5          m          Male
## 7     id7   98   92       1     low      F 12.0          l        Female
## 8     id8   77   80       2    high      F  1.0          h        Female
## 9     id9   89   85       1     med      F  8.0          m        Female
## 10   id10   80   82       2     low      M  4.5          l          Male
## 11   id11   78   89       2    high      F  2.5          h        Female
## 12   id12   80   89       2     low      F  4.5          l        Female
#ifels
data$code2 = ifelse(data$stat>85,"GOOD","NOT BAD")
data
##    id_mhw stat math paralel code1   code2
## 1     id1   86   79       1     1    GOOD
## 2     id2   87   92       2     1    GOOD
## 3     id3   90   87       1     1    GOOD
## 4     id4   91   87       2     1    GOOD
## 5     id5   92   90       1     1    GOOD
## 6     id6   78   79       2     0 NOT BAD
## 7     id7   98   92       1     1    GOOD
## 8     id8   77   80       2     0 NOT BAD
## 9     id9   89   85       1     1    GOOD
## 10   id10   80   82       2     0 NOT BAD
## 11   id11   78   89       2     0 NOT BAD
## 12   id12   80   89       2     0 NOT BAD
#recode
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.3     v stringr 1.4.0
## v tidyr   1.1.3     v forcats 0.5.1
## v readr   2.0.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
## x car::recode()   masks dplyr::recode()
## x purrr::some()   masks car::some()
data$code4 <- recode_factor(data$code2, 'GOOD' = 1, 'NOT BAD' =  0)

#case_when()
data$case_when <- case_when((data$stat > 78) ~ "high",TRUE ~ "unknown") 
data
##    id_mhw stat math paralel code1   code2 code4 case_when
## 1     id1   86   79       1     1    GOOD     1      high
## 2     id2   87   92       2     1    GOOD     1      high
## 3     id3   90   87       1     1    GOOD     1      high
## 4     id4   91   87       2     1    GOOD     1      high
## 5     id5   92   90       1     1    GOOD     1      high
## 6     id6   78   79       2     0 NOT BAD     0   unknown
## 7     id7   98   92       1     1    GOOD     1      high
## 8     id8   77   80       2     0 NOT BAD     0   unknown
## 9     id9   89   85       1     1    GOOD     1      high
## 10   id10   80   82       2     0 NOT BAD     0      high
## 11   id11   78   89       2     0 NOT BAD     0   unknown
## 12   id12   80   89       2     0 NOT BAD     0      high

Merging Data

#bisa dilakukan denga rbind atau cbind #lebih mudah dengan fungsi merge

#latihan 9
#gunakanlah data1 dengan tabel1 berdasarkan peubah pertamanya
tabel1 <- data.frame(tr=c("p4","p2","p5"),k1=c(50,100,200))
data9 <- merge(data1,tabel1, by.x = 1, by.y = 1, all = F)
data9
## [1] perl  kel   resp  baru1 k1   
## <0 rows> (or 0-length row.names)
data10 <- merge(data1,tabel1, by.x = 'perl', by.y = 'tr', all = T)
data10
##    perl kel resp baru1  k1
## 1    P1   1    1    12  NA
## 2    P1   2    3    11  NA
## 3    P1   3    5    10  NA
## 4    p2  NA   NA    NA 100
## 5    P2   1    7     9  NA
## 6    P2   2    9     8  NA
## 7    P2   3   11     7  NA
## 8    P3   1   13     6  NA
## 9    P3   2   15     5  NA
## 10   P3   3   17     4  NA
## 11   p4  NA   NA    NA  50
## 12   P4   1   19     3  NA
## 13   P4   2   21     2  NA
## 14   P4   3   23     1  NA
## 15   p5  NA   NA    NA 200
#data sampel
datas1 = c(1,2,3)
datas1
## [1] 1 2 3
datas2 = c(4,5,6)
datas2
## [1] 4 5 6
cbind(datas1,datas2) #digunakan untuk menggabungkan kolomOutput
##      datas1 datas2
## [1,]      1      4
## [2,]      2      5
## [3,]      3      6
rbind(datas1,datas2) #digunakan untuk menggabungkan barisOutput
##        [,1] [,2] [,3]
## datas1    1    2    3
## datas2    4    5    6
#tabel product
id_cust = paste("ID", rep(120:129), sep="")
id_cust
##  [1] "ID120" "ID121" "ID122" "ID123" "ID124" "ID125" "ID126" "ID127" "ID128"
## [10] "ID129"
product = paste("barang",11:20,sep=" ")
product
##  [1] "barang 11" "barang 12" "barang 13" "barang 14" "barang 15" "barang 16"
##  [7] "barang 17" "barang 18" "barang 19" "barang 20"
tabel_product = data.frame(id_cust, product)
tabel_product
##    id_cust   product
## 1    ID120 barang 11
## 2    ID121 barang 12
## 3    ID122 barang 13
## 4    ID123 barang 14
## 5    ID124 barang 15
## 6    ID125 barang 16
## 7    ID126 barang 17
## 8    ID127 barang 18
## 9    ID128 barang 19
## 10   ID129 barang 20
#tabel daerah
id_cust = c("ID122", "ID126", "ID128", "ID129", "ID130", "ID133", "ID135")
id_cust
## [1] "ID122" "ID126" "ID128" "ID129" "ID130" "ID133" "ID135"
asal = paste("Kota",1:7,sep="-")
asal
## [1] "Kota-1" "Kota-2" "Kota-3" "Kota-4" "Kota-5" "Kota-6" "Kota-7"
tabel_daerah = data.frame(id_cust, asal)
tabel_daerah
##   id_cust   asal
## 1   ID122 Kota-1
## 2   ID126 Kota-2
## 3   ID128 Kota-3
## 4   ID129 Kota-4
## 5   ID130 Kota-5
## 6   ID133 Kota-6
## 7   ID135 Kota-7
#LEFT JOIN
datas8 = merge(x=tabel_product,y=tabel_daerah,by="id_cust",all.x=TRUE)
datas8
##    id_cust   product   asal
## 1    ID120 barang 11   <NA>
## 2    ID121 barang 12   <NA>
## 3    ID122 barang 13 Kota-1
## 4    ID123 barang 14   <NA>
## 5    ID124 barang 15   <NA>
## 6    ID125 barang 16   <NA>
## 7    ID126 barang 17 Kota-2
## 8    ID127 barang 18   <NA>
## 9    ID128 barang 19 Kota-3
## 10   ID129 barang 20 Kota-4
#INNER JOIN
datas9 = merge(x=tabel_product,y=tabel_daerah,by="id_cust", all=FALSE)
datas9
##   id_cust   product   asal
## 1   ID122 barang 13 Kota-1
## 2   ID126 barang 17 Kota-2
## 3   ID128 barang 19 Kota-3
## 4   ID129 barang 20 Kota-4
#RIGHT JOIN
datas11 = merge(x=tabel_product,y=tabel_daerah,by="id_cust",all.y=TRUE)
datas11
##   id_cust   product   asal
## 1   ID122 barang 13 Kota-1
## 2   ID126 barang 17 Kota-2
## 3   ID128 barang 19 Kota-3
## 4   ID129 barang 20 Kota-4
## 5   ID130      <NA> Kota-5
## 6   ID133      <NA> Kota-6
## 7   ID135      <NA> Kota-7
#OUTER JOIN
datas12 = merge(x=tabel_product,y=tabel_daerah,by="id_cust",all=TRUE)
datas12
##    id_cust   product   asal
## 1    ID120 barang 11   <NA>
## 2    ID121 barang 12   <NA>
## 3    ID122 barang 13 Kota-1
## 4    ID123 barang 14   <NA>
## 5    ID124 barang 15   <NA>
## 6    ID125 barang 16   <NA>
## 7    ID126 barang 17 Kota-2
## 8    ID127 barang 18   <NA>
## 9    ID128 barang 19 Kota-3
## 10   ID129 barang 20 Kota-4
## 11   ID130      <NA> Kota-5
## 12   ID133      <NA> Kota-6
## 13   ID135      <NA> Kota-7

Reshaping

#Membentuk data baru dengan cara:1) long to wide, 2) wide to long #Menggunakan fungsi reshape()

#latihan 10
#ubahlah data1 menjadi data dengan setiap barisnya merupakan masing-masing perlakuan
#long to wide
data11 <- reshape(data1[,-4],idvar = 'perl',timevar = 'kel', direction = "wide")
data11
##    perl resp.1 resp.2 resp.3
## 1    P1      1      3      5
## 4    P2      7      9     11
## 7    P3     13     15     17
## 10   P4     19     21     23
#long to wide
data12 <- reshape(data11,idvar = 'perl',timevar = 'kel', direction = "long")
data12
##      perl kel resp.1
## P1.1   P1   1      1
## P2.1   P2   1      7
## P3.1   P3   1     13
## P4.1   P4   1     19
## P1.2   P1   2      3
## P2.2   P2   2      9
## P3.2   P3   2     15
## P4.2   P4   2     21
## P1.3   P1   3      5
## P2.3   P2   3     11
## P3.3   P3   3     17
## P4.3   P4   3     23
#create dataframe
kota = c("Manado", "Jakarta", "Bandung")
bekerja = c("23400","56700","34500")
tidak_kerja = c("10000","30000","12000")
tabel = data.frame(kota, bekerja, tidak_kerja)
colnames(tabel)<- c("Nama Kota","Bekerja","Tidak Bekerja")
tabel
##   Nama Kota Bekerja Tidak Bekerja
## 1    Manado   23400         10000
## 2   Jakarta   56700         30000
## 3   Bandung   34500         12000
#wide to long -> data frame diurutkan by varying (harus gunakan varying dan v.names) 
widetolong<- reshape(tabel,idvar="Nama Kota",
                     varying = c("Bekerja","Tidak Bekerja"),
                     v.name=c("value"),
                     times=c("Bekerja","Tidak Bekerja"),
                     new.row.names = 1:100,
                     direction="long")
widetolong
##   Nama Kota          time value
## 1    Manado       Bekerja 23400
## 2   Jakarta       Bekerja 56700
## 3   Bandung       Bekerja 34500
## 4    Manado Tidak Bekerja 10000
## 5   Jakarta Tidak Bekerja 30000
## 6   Bandung Tidak Bekerja 12000
# long to wide -> harus ada nama kolom buat idvar dan  v.names
longtowide <- reshape(widetolong, idvar="Nama Kota",
                      v.names = "value",
                      timevar = "time",
                      direction="wide")
longtowide
##   Nama Kota value.Bekerja value.Tidak Bekerja
## 1    Manado         23400               10000
## 2   Jakarta         56700               30000
## 3   Bandung         34500               12000
summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.