Laporan Praktikum 2 - OBJEK DI R
A. Dasar-Dasar R
Pada Dasar-Dasar R ini dipelajari beberapa hal, yaitu :
A.1 Assignment
Secara umum, untuk memasukkan suatu nilai ke suatu variabel menggunakan menggunakan <-
## [1] 99
## [1] 99
## [1] 99
Dari 3 tampilan di atas diketahui bahwa <-
,=
, dan ->
memiliki fungsi yang sama dalam assignment. Jadi, A<-99
, A=99
, 99->A
memiliki maksud yang sama.
A.2 Case Sensitive
Dalam R, perbedaan huruf kapital dan huruf kecil, sehingga A<-5
berbeda dengan a<-10
, sebagaimana ditunjukkan pada kode berikut ini.
## [1] 5
## [1] 10
A.3 Penamaan Objek
- Diawali huruf (
A-Z
ataua-z
) atau titik (.
) - Tidak menggunakan spasi ataupun karakter spesial (
!
,@
,#
, dan seterusnya) - Tidak menggunakan atau menghindari kata yang sudah digunakan oleh R (
NULL
,TRUE
,FALSE
,q
,c
,t
,sin
,cos
, dan lain lain)
A.4 Packages
Packages menurut Datacamp, adalah
R packages are collections of functions and data sets developed by the community. They increase the power of R by improving existing base R functionalities, or by adding new ones
Sebagaimana ditampilkan pada RDocumentation, sampai saat ini (Jum’at 25 September 2020 pukul 14.25 WIB) ada 20.568 Package R yang tersebar pada CRAN
, Bioconductor
dan Github
.
A.5 Rstudio
Berdasarkan Wikipedia, adalah
RStudio is an integrated development environment (IDE) for R, a programming language for statistical computing and graphics. It is available in two formats: RStudio Desktop is a regular desktop application while RStudio Server runs on a remote server and allows accessing RStudio using a web browser.
B. Objek DI R
Objek-objek yang ada di R, antara lain Vector
, Matrix
, Array
, Factor
, List
, Data Frame
.
B.1 Vector
Berikut ini adalah perintah untuk Vector
c(…), seq(…), rep(…), paste(…)
Berikut sebagai contoh :
## [1] 2 4 7 3
## [1] "2" "4" "7" "3"
## [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
## [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
## [1] 1 1 1
## [1] 1 2 3 1 2 3 1 2 3
## [1] 1 2 2 3 3 3
## [1] 1 1 2 2 3 3
## [1] 1 1 2 2 3 3
## [1] "A1" "A2" "A3" "A4" "A5" "A6" "A7" "A8" "A9" "A10"
## [1] "A1" "A2" "A3" "A4" "A5" "A6" "A7" "A8" "A9" "A10"
## [1] "A-1" "A-2" "A-3" "A-4" "A-5" "A-6" "A-7" "A-8" "A-9" "A-10"
## [1] "A1" "A1" "A2" "A2" "A3" "A3"
## [1] "A 1" "A 1" "A 2" "A 2" "A 3" "A 3"
## [1] "7"
## [1] 5.5 6.0 6.5 7.0 7.5 8.0
## [1] "A4" "A7" "A9"
## [1] "A2" "A2" "A3" "A3"
## [1] 12
## [1] "la" "ye" "ye" "la" "la" "ye" "ye" "la" "la" "ye" "ye" "la" "la" "ye" "ye"
## [16] "la"
## [1] "la" "la" "la" "ye" "ye" "ye" "la" "la" "la" "ye" "ye" "ye"
#Latihan 2
#Buatlah syntax agar dihasilkan output vektor sebagai berikut:
#X1 Y2 X3 Y4 X5 Y6 X7 Y8 X9 Y10
#1 4 7 10 13 16 19 22 25 28
lat2.1<-c("X", "Y")
lat2.1<-rep(lat2.1,5)
lat2.2<-rep(1:10)
lat2.3<-seq(1,28,by=3)
lat2.4<-paste0(lat2.1,lat2.2)
lat2.4<-factor(lat2.4)
factor(paste0(rep(c("X","Y"),5),1:10))
## [1] X1 Y2 X3 Y4 X5 Y6 X7 Y8 X9 Y10
## Levels: X1 X3 X5 X7 X9 Y10 Y2 Y4 Y6 Y8
## [1] 1 4 7 10 13 16 19 22 25 28
B2. Matrix
Berikut ini adalah perintah untuk Matrix
matrix(…,m,n), dim(vector)<-c(m,n),rbind(…),cbind(…)
Berikut sebagai contoh :
## [1] 1 2 3 4 5 6 7 8 9 10 11 12
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
## Warning in matrix(1:10, 4, 4): data length [10] is not a sub-multiple or
## multiple of the number of rows [4]
## [,1] [,2] [,3] [,4]
## [1,] 1 5 9 3
## [2,] 2 6 10 4
## [3,] 3 7 1 5
## [4,] 4 8 2 6
## [,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
## [1] 1 2 3 4 5 6 7 8 9 10 11 12
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
## [,1] [,2]
## [1,] 6 8
## [2,] 7 9
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
## [3,] 6 8
## [4,] 7 9
## [,1] [,2] [,3] [,4]
## [1,] 6 8 1 3
## [2,] 7 9 2 4
## [1] 4 2
## [1] 2 4
## NULL
## [1] 16
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
## [1] 7
## [1] 6 7 8
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [,1] [,2] [,3]
## [1,] 1 3 4
## [2,] 9 11 12
## [1] 4
B.3 Array
Berikut ini adalah perintah untuk Array
array(…,dim=c(…))
Berikut sebagai contoh :
## , , 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, 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
## , , 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
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [,1] [,2]
## [1,] 5 7
## [2,] 6 8
## [1] 9 10
B.4 Factor
Berikut ini adalah perintah untuk Factor
factor(…), ordered(…,levels=c(…))
Berikut sebagai contoh :
## [1] "A" "B" "AB" "O"
## [1] A B AB O
## Levels: A AB B O
## [1] A B AB O
## Levels: O A B AB
## [1] "O" "A" "B" "AB"
## [1] "SD" "SMP" "SMA"
## [1] SD SMP SMA
## Levels: SD < SMA < SMP
## [1] SD SMP SMA
## Levels: SD < SMP < SMA
## [1] SD SMP SMA
## Levels: SD < SMP < SMA
## [1] "SD" "SMP" "SMA"
## [1] B
## Levels: A AB B O
## [1] SMP SMA
## Levels: SD < SMP < SMA
B.5 List
Berikut ini adalah perintah untuk List
list(…)
Berikut sebagai contoh :
## [[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
## $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
## [1] 2 4 7 3
## [1] A B AB O
## Levels: O A B AB
## $mat
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
## [[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
## NULL
## [1] 4
## [1] "vect" "mat" "array" "fac"
B.6 Data Frame
Berikut ini adalah perintah untuk Data Frame
data.frame(…)
Berikut sebagai contoh :
## [1] 11 12 13 14 15
## [1] F G H I J
## Levels: F G H I J
## d5 a17
## 1 F 11
## 2 G 12
## 3 H 13
## 4 I 14
## 5 J 15
## [1] 11
## d5 a17
## 3 H 13
## [1] F G H I J
## Levels: F G H I J
## [1] 11 12 13 14 15
## [1] "d5" "a17"
## '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
## 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!
#> 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
## [1] "P1" "P1" "P1" "P2" "P2" "P2" "P3" "P3" "P3" "P4" "P4" "P4"
## [1] 1 2 3 1 2 3 1 2 3 1 2 3
## Levels: 1 2 3
## 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
Laporan Praktikum 3 - MANAJEMEN DATA FRAME (Data Wrangling/Munging)
A. Membuat Peubah baru dalam data frame
Data Frame untuk Data Wrangling adalah data1
pada Pertemuan 2 Latihan 3 Dilakukan seperti membuat vektor (dengan indeks atau operasi seleksi)
namadataframe$namavariabelbaru<-ekspresi
namadataframe[,nomorkolom]<-ekspresi
## 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
#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
B. SubSetting Data
Dilakukan untuk akses sebagian data. Membuat ide logic untuk diterapkan dalam vektor logic yang diinginkan
Fungsi yang digunakan :
==, !=, >, >=, <, <=, %in%, duplicated(…), which(…) , is.na(…), is.null(…), is.numeric(…), dll…
## 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
#LATIHAN 2
#Dari data1 tersebut ambillah yang termasuk kelompok 1
indeks1 <- data1$Kel == 1
data2 <- data1[indeks1,]
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
indeks2 <- data1$Kel == 1 | data1$Perl == "P2"
data3 <- data1[indeks2,]
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 responnya berupa bilangan prima
indeks3 <- data1$Resp %in% c(2,3,5,7,11,13,17,19,23)
data4 <- data1[indeks3,]
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
C. Sorting Data
Dilakukan untuk mengurutkan data berdasarkan beberapa peubah tertentu. Dilakukan dengan membuat vektor logika untuk melakukan pengurutan data.
Fungsi yang sering digunakan
order(…), sort(…), rev(…), unique(…)
## 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
#Latihan 5
#Urutkan data1 tersebut berdasarkan kelompok secara ascending
indeks4 <- order(data1$Kel)
data5 <- data1[indeks4,]
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 dan respon secara descending
indeks5 <- order(data1$Kel, data1$Resp, decreasing=TRUE)
data6 <- data1[indeks5,]
data6
## Perl Kel Resp baru1
## 12 P4 3 23 1
## 9 P3 3 17 4
## 6 P2 3 11 7
## 3 P1 3 5 10
## 11 P4 2 21 2
## 8 P3 2 15 5
## 5 P2 2 9 8
## 2 P1 2 3 11
## 10 P4 1 19 3
## 7 P3 1 13 6
## 4 P2 1 7 9
## 1 P1 1 1 12
#Latihan 7
#Urutkan data1 tersebut berdasarkan kelompok secara ascending dan respon secara descending
indeks6 <- order(data1$Resp, decreasing=TRUE)
data7 <- data1[indeks6,]
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
## [1] 19 13 7 1 21 15 9 3 23 17 11 5
## [1] 1 3 5 7 9 11 13 15 17 19 21 23
## [1] 5 11 17 23 3 9 15 21 1 7 13 19
## [1] 4 8 12 3 7 11 2 6 10 1 5 9
## [1] 10 7 4 1 11 8 5 2 12 9 6 3
## [1] TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE
## [1] 1 2 5 6 9 10 11
## [1] 19 13 21 15 23 17 11
## [1] 19 13 21 15 23 17 11
D. Recoding Data
Digunakan untuk membuat nilai baru dari nilai peubah yang sudah ada.
Dapat dilakukan secara logical,
fungsi ifelse(…), dan fungsi recode (…)
## 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
#Lakukanlah recoding pada data8 untuk variabel respon dengan kondisi jika respon<15 maka Code = 1, selainnya Code = 0
#dengan logical
data8$Code1 <- 0*(data8$Resp>=15) + 1*(data8$Resp<15)
data8$Code1
## [1] 0 1 1 1 0 0 1 1 0 0 1 1
## Perl Kel Resp baru1 Code1
## 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
## [1] 0 1 1 1 0 0 1 1 0 0 1 1
## Perl Kel Resp baru1 Code1 Code2
## 10 P4 1 19 3 0 0
## 7 P3 1 13 6 1 1
## 4 P2 1 7 9 1 1
## 1 P1 1 1 12 1 1
## 11 P4 2 21 2 0 0
## 8 P3 2 15 5 0 0
## 5 P2 2 9 8 1 1
## 2 P1 2 3 11 1 1
## 12 P4 3 23 1 0 0
## 9 P3 3 17 4 0 0
## 6 P2 3 11 7 1 1
## 3 P1 3 5 10 1 1
## Warning: package 'car' was built under R version 4.0.2
## Loading required package: carData
## [1] 0 1 1 1 0 0 1 1 0 0 1 1
## Perl Kel Resp baru1 Code1 Code2 Code3
## 10 P4 1 19 3 0 0 0
## 7 P3 1 13 6 1 1 1
## 4 P2 1 7 9 1 1 1
## 1 P1 1 1 12 1 1 1
## 11 P4 2 21 2 0 0 0
## 8 P3 2 15 5 0 0 0
## 5 P2 2 9 8 1 1 1
## 2 P1 2 3 11 1 1 1
## 12 P4 3 23 1 0 0 0
## 9 P3 3 17 4 0 0 0
## 6 P2 3 11 7 1 1 1
## 3 P1 3 5 10 1 1 1
E. Merging Data
Bisa dilakukan dengan rbind(...)
atau cbind(...). Lebih mudah dilakukan dengan fungsi
merge(…)`
## 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
## Tr k1
## 1 P4 50
## 2 P2 100
## 3 P5 200
#Gabungkanlah data1 dengan tabel1 berdasarkan peubah pertamanya.
data9<-merge(data1, tabel1, by.x=1, by.y=1, all=FALSE)
data9
## Perl Kel Resp baru1 k1
## 1 P2 3 11 7 100
## 2 P2 1 7 9 100
## 3 P2 2 9 8 100
## 4 P4 1 19 3 50
## 5 P4 2 21 2 50
## 6 P4 3 23 1 50
## 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 3 11 7 100
## 5 P2 1 7 9 100
## 6 P2 2 9 8 100
## 7 P3 2 15 5 NA
## 8 P3 3 17 4 NA
## 9 P3 1 13 6 NA
## 10 P4 1 19 3 50
## 11 P4 2 21 2 50
## 12 P4 3 23 1 50
## 13 P5 <NA> NA NA 200
F. Reshaping Data
Membentuk data baru dengan cara : • Long to wide format • Wide to long format Menggunakan fungsi reshape(…)
## 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
#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
## 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