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?