Manipulasi data frame di R

2019/05/14

Manipulasi data frame

Salah satu kelas variabel di R adalah data frame. Kelas ini yang sering digunakan untuk dianalisis. Misalnya data iris dari paket base.

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
class(iris)
## [1] "data.frame"

Ambil sebagian kolom

Data yang digunakan hanya kolom pertama (Sepal.Length) dan ketiga (Petal.Length) saja. Jika data ini diplotkan dan dibuat garis regresi diperoleh:

library(ggplot2)
iris2 <- iris[,c(1,3,5)]
ggplot(data = iris2, aes(x= Sepal.Length, y = Petal.Length)) +
  geom_point() +                                              
  stat_smooth(method = "lm")

Operasi pada kolom

Nilai Petal.Length dapat ditransformasi menggunakan logarithma kemudian diplotkan terhadap Sepal.Length. Nilai Petal.Length yang ditransformasi ini ditempatkan pada kolom yang baru dengan nama misalnya log.Petal.

iris2$log.Petal <- log(iris2$Petal.Length)
head(iris2)
##   Sepal.Length Petal.Length Species log.Petal
## 1          5.1          1.4  setosa 0.3364722
## 2          4.9          1.4  setosa 0.3364722
## 3          4.7          1.3  setosa 0.2623643
## 4          4.6          1.5  setosa 0.4054651
## 5          5.0          1.4  setosa 0.3364722
## 6          5.4          1.7  setosa 0.5306283

Kemudian plot dari variabel tertransformasi ini adalah

ggplot(data = iris2, aes(x= Sepal.Length, y = log.Petal)) +
  geom_point() +                                              
  stat_smooth(method = "lm")

Penggunaan paket dplyr

Fungis pada paket dplyr untuk manipulasi data frame berbeda dengan fungsi pada paket base. Misalnya untuk menambah variabel menggunakan fungsi mutate.

library(dplyr)
irisdplyr <- iris[,c(1,3,5)]
irisdplyr <- mutate(irisdplyr, log.Petal = log(Petal.Length))
head(irisdplyr)
##   Sepal.Length Petal.Length Species log.Petal
## 1          5.1          1.4  setosa 0.3364722
## 2          4.9          1.4  setosa 0.3364722
## 3          4.7          1.3  setosa 0.2623643
## 4          4.6          1.5  setosa 0.4054651
## 5          5.0          1.4  setosa 0.3364722
## 6          5.4          1.7  setosa 0.5306283

Pada paket dplyr operasi data frame dapat menggunakan operasi pipe (%>%) yang diimpor dari paket magrittr. Misalnya penambahan variabel log.Petal2.

irisdplyr <- irisdplyr %>% 
  mutate(log.Petal2 = log(Petal.Length))

Spesies setosa saja yang dipilih:

irisdplyr %>%
  filter(Species == "setosa") %>%
  summary
##   Sepal.Length    Petal.Length         Species     log.Petal     
##  Min.   :4.300   Min.   :1.000   setosa    :50   Min.   :0.0000  
##  1st Qu.:4.800   1st Qu.:1.400   versicolor: 0   1st Qu.:0.3365  
##  Median :5.000   Median :1.500   virginica : 0   Median :0.4055  
##  Mean   :5.006   Mean   :1.462                   Mean   :0.3728  
##  3rd Qu.:5.200   3rd Qu.:1.575                   3rd Qu.:0.4539  
##  Max.   :5.800   Max.   :1.900                   Max.   :0.6419  
##    log.Petal2    
##  Min.   :0.0000  
##  1st Qu.:0.3365  
##  Median :0.4055  
##  Mean   :0.3728  
##  3rd Qu.:0.4539  
##  Max.   :0.6419

Plot spesies setosa saja:

irisdplyr %>% 
  filter(Species == "setosa") %>%
  ggplot(., aes(x=Sepal.Length, y=log.Petal2)) + 
  geom_point() + ggtitle("Setosa") +
  stat_smooth(method = "lm")

Perbandingan

Jika dibandingkan dengan menggunakan fungsi paket base, hasil menggunakan fungsi di paket dplyr dengan paket base adalah sama.

spsetosa <- iris2[iris2$Species == "setosa",]
ggplot(data = spsetosa, aes(x= Sepal.Length, y = log.Petal)) +
  geom_point() + ggtitle("Setosa") +                                            
  stat_smooth(method = "lm")