Working Smarter, not Harder

count()

Pengguna R saat ini tentu sangat bersyukur karena dimanjakan oleh banyak sekali kemudahan ketika menggunakan R untuk berbagai keperluan. Salah satu kemudahan yang didapat oleh pengguna R adalah kemudahan dalam melakukan manipulasi data dengan menggunakan package tidyverse. Bagi yang terbiasa menggunakan SQL, tentu tidak akan kesulitan dalam melakukan manipulasi data dengan tidyverse. Tulisan kali ini akan mengulas sedikit tentang manipulasi data menggunakan R.

Data yang akan digunakan adalah data penghasilan (income) yang diambil dari database Biro Sensus Amerika Serikat tahun 1994 oleh Ronny Kohavi dan Barry Becker (Data Mining and Visualization, Silicon Graphics). Data tersebut bisa diunduh di sini.

Data hasil unduhan berupa file csv dan diberi nama “income-1”. Data tersebut bisa dibuka menggunakan sintaks berikut

income <- read.csv("income-1.csv")

Package yang akan digunakan adalah tidyverse dan broom.

library(tidyverse)
library(broom)

Sintaks berikut akan membuat tabel baru yang berisi peubah (variable) gender, country, dan agregat hours_per_week yang diberi nama total_hours. Kemudian data diurutkan secara menurun (descending) berdasarkan total_hours.

income %>%
  group_by(gender, country) %>%
  summarize(total_hours = sum(hours_per_week)) %>%
  arrange(desc(total_hours))
## `summarise()` has grouped output by 'gender'. You can override using the `.groups` argument.
## # A tibble: 83 x 3
## # Groups:   gender [2]
##    gender country       total_hours
##    <chr>  <chr>               <int>
##  1 Male   United States      828148
##  2 Female United States      351713
##  3 Male   Mexico              20577
##  4 Male   <NA>                18094
##  5 Female <NA>                 6108
##  6 Female Mexico               5362
##  7 Male   Philippines          5053
##  8 Male   India                3760
##  9 Male   Germany              3487
## 10 Male   Canada               3360
## # ... with 73 more rows

Karena terdapat NA pada peubah country, maka R menampilkan pesan (WARNING) sekaligus saran perbaikannya. Berikut adalah sintaks untuk mengatasi masalah tersebut.

income$country <- fct_explicit_na(income$country)

Setelah dilakukan perbaikan, maka tidak ada lagi pesan kesalahan dan tampilan tabel baru tersebut adalah sebagai berikut.

## `summarise()` has grouped output by 'gender'. You can override using the `.groups` argument.
## # A tibble: 83 x 3
## # Groups:   gender [2]
##    gender country       total_hours
##    <chr>  <fct>               <int>
##  1 Male   United States      828148
##  2 Female United States      351713
##  3 Male   Mexico              20577
##  4 Male   (Missing)           18094
##  5 Female (Missing)            6108
##  6 Female Mexico               5362
##  7 Male   Philippines          5053
##  8 Male   India                3760
##  9 Male   Germany              3487
## 10 Male   Canada               3360
## # ... with 73 more rows

Ternyata, tabel yang sama bisa dibuat hanya dengan menggunakan sebaris sintaks menggunakan fungsi count. Berikut adalah sintaksnya.

income %>%
  count(gender, country, wt = hours_per_week, name = "total_hours", sort = T)
##    gender             country total_hours
## 1    Male       United States      828148
## 2  Female       United States      351713
## 3    Male              Mexico       20577
## 4    Male           (Missing)       18094
## 5  Female           (Missing)        6108
## 6  Female              Mexico        5362
## 7    Male         Philippines        5053
## 8    Male               India        3760
## 9    Male             Germany        3487
## 10   Male              Canada        3360
## 11 Female         Philippines        2787
## 12   Male         El Salvador        2678
## 13   Male         Puerto Rico        2511
## 14   Male             England        2444
## 15   Male                Cuba        2323
## 16   Male               South        2254
## 17   Male               Italy        2226
## 18 Female             Germany        2132
## 19   Male               China        2078
## 20   Male               Japan        1986
## 21 Female         Puerto Rico        1886
## 22   Male           Guatemala        1719
## 23   Male             Vietnam        1673
## 24   Male              Poland        1644
## 25 Female             Jamaica        1580
## 26   Male  Dominican Republic        1566
## 27   Male                Iran        1563
## 28   Male             Jamaica        1546
## 29 Female              Canada        1529
## 30   Male              Taiwan        1492
## 31 Female  Dominican Republic        1407
## 32   Male            Columbia        1398
## 33 Female                Cuba        1397
## 34 Female             England        1321
## 35 Female         El Salvador        1222
## 36 Female               South        1139
## 37   Male            Portugal        1084
## 38   Male              Greece        1074
## 39   Male               Haiti         939
## 40 Female            Columbia         907
## 41   Male              France         845
## 42   Male             Ecuador         833
## 43 Female             Vietnam         829
## 44   Male           Nicaragua         829
## 45 Female               Italy         811
## 46 Female           Guatemala         792
## 47 Female               China         756
## 48   Male             Ireland         727
## 49 Female               Japan         723
## 50 Female               Haiti         685
## 51   Male            Cambodia         657
## 52 Female              Poland         656
## 53   Male          Yugoslavia         613
## 54   Male                Hong         588
## 55 Female                Peru         549
## 56   Male                Peru         548
## 57 Female              Taiwan         491
## 58 Female            Thailand         485
## 59 Female            Portugal         466
## 60 Female              France         462
## 61 Female           Nicaragua         401
## 62   Male                Laos         400
## 63 Female               India         393
## 64 Female Trinadad and Tobago         372
## 65   Male Trinadad and Tobago         338
## 66   Male            Thailand         333
## 67 Female                Iran         328
## 68 Female                Laos         326
## 69   Male         Outlying US         310
## 70   Male            Scotland         300
## 71 Female             Ireland         291
## 72   Male             Hungary         290
## 73 Female         Outlying US         276
## 74 Female             Ecuador         275
## 75 Female            Honduras         252
## 76 Female                Hong         230
## 77   Male            Honduras         220
## 78 Female              Greece         209
## 79 Female            Scotland         195
## 80 Female             Hungary         173
## 81 Female            Cambodia         120
## 82 Female          Yugoslavia         100
## 83 Female  Holand Netherlands          40

Bagaimana? Gampang bukan?

comments powered by Disqus