Mengolah data dalam bentuk tabel bukanlah perkara mudah ketika kita dihadapkan dengan jumlah data yang sangat banyak. Apalagi memiliki jumlah variabel yang banyak, tentunya akan menjadi permasalahan yang rumit sekali jika kita hanya mengandalkan Microsoft Excel sebagai satu-satunya alat pengolahan data.

Untuk itu, kita mesti menggunakan program pengolahan data yang bisa lebih fleksibel dalam menjawab berbagai permasalahan data. Dengan asumsi bahwa pembaca di sini adalah mereka yang telah mengerti apa itu program R dan secara basic telah menguasainya, maka tulisan ini akan langsung membahas teknik-teknik pengolahan data tabel statistik yang akan sering digunakan.

Packages yang digunakan adalah:

  • dplyr
  • rio

Memilih data yang akan digunakan dengan fungsi select()

Semua dokumentasi dapat di pelajari di :

?select_helpers

Gambaran data yang akan dijadikan contoh:

Kita juga bisa melihat nama-nama kolom dengan menggunakan fungsi glimpse().

Menyeleksi kolom yang berurutan secara cepat

counties %>%
  select(state, county, population, professional:production)

Menyeleksi kolom berdasarkan nama kolom tertentu

counties %>%
  select(state, county, population, ends_with("work"))

Beberapa verbs yang penggunaannya sama seperti di atas, yaitu:

  • contain() : yaitu yang mengandung kata tertentu
  • start_with() : yaitu kata yang dimulai dari kata tertentu
  • last_col() : yaitu kolom terakhir

Atau kita bisa memilih kolom dengan cara membuang kolom yang tidak perlu dengan cara menambakan tanda minus (-)

counties %>%
  select(-state)

Kode di atas akan memasukkan semua kolom kecuali kolom state.

Teknik menyeleksi data karakter

.* = semua kata dari awal
\s = semua jenis simbol termasuk spasi
([0-9]+)\snomination. = angka yang berada di belakang kata nomination
\1 = akan mengganti semua kata yang akan digantikan dengan angka yang dimaksud pada ([0-9]+)
*$ = semua karakter sampai akhir

Contoh:

awards <- c("Won 1 Oscar.",
            "Won 1 Oscar. Another 9 wins & 24 nominations.",
            "1 win and 2 nominations.",
            "2 wins & 3 nominations.",
            "Nominated for 2 Golden Globes. 1 more win & 2 nominations.",
            "4 wins & 1 nomination.")

sub(".*\\s([0-9]+)\\snomination.*$", "\\1", awards)
[1] "Won 1 Oscar." "24"           "2"            "3"            "2"            "1"

Mengubah nama kolom

counties %>%
  count(state) %>%
  rename(num_counties = n)

Nama kolom yang baru adalah num_counties, dan nama kolom yang lama adalah n.

Atau bisa langsung mengubah nama kolom dari fungsi select()

counties %>%
  select(state, county, poverty_rate = poverty)

transmute()

Fungsi transmute() adalah gabungan dari fungsi select() dan mutate(). Dengan penggunaan fungsi ini, maka penulisan kode bisa menjadi lebih sederhana dan sedikit, namun bisa menghasilkan ouput yang sama.

counties %>%
  transmute(state, county, poverty_rate = poverty/100)

Contoh analisis data

Data yang digunakan adalah sebagai berikut:

Basic filter:

babynames %>%
  filter(name == "Steven")

Multiple filter pada kolom yang sama:

babynames %>%
  filter(name %in% c("Steven", "Thomas", "Matthew"))

Ingin diketahui kapan nama bayi “x” menjadi paling populer di antara tahun-tahun lainnya.

Berikut langkah-langkah untuk mencari subgrup yang paling tinggi persentasenya berdasarkan kemunculannya pada tiap grup.

Step 1: Mencari jumlah nama per tahun

babynames %>%
  group_by(year) %>%
  mutate(year_total = sum(number)) 

Step 2: Ingin dihitung persentase penggunaan nama-nama per tahun nya.

babynames %>%
  group_by(year) %>%
  mutate(year_total = sum(number)) %>%
  ungroup() %>%
  mutate(fraction = number / year_total) %>%

Step 3: Di tahun berapa, nama-nama tersebut yang paling populer (nomor satunya)

babynames %>%
  group_by(year) %>%
  mutate(year_total = sum(number)) %>%
  ungroup() %>%
  mutate(fraction = number / year_total) %>%
  group_by(name) %>%  
  filter(name %in% c("Alfred", "Annis", "Bernard"))  %>%
  top_n(1, fraction)

Melihat trend penggunaan nama bayi selama tahun berjalan

names_normalized <- babynames %>%
                     group_by(name) %>%
                     mutate(name_total = sum(number),
                            name_max = max(number)) %>%
                     ungroup() %>%
                     mutate(fraction_max = number / name_max)

names_filtered <- names_normalized %>%
  filter(name %in% c("Steven", "Thomas", "Matthew"))

ggplot(names_filtered, aes(x=year, y=fraction_max, color=name)) +
  geom_line()

Dengan cara ini kita bisa menentukan di tahun berapa penggunaan 3 nama di atas yang paling banyak oleh masyarakat pada saat itu.

name di sini adalah subgrup dan year adalah grup nya.

Pada tahun berapa terjadinya lonjakan penggunaan nama

babynames %>% 
        group_by(year) %>% 
        mutate(year_total = sum(number)) %>% 
        ungroup() %>% 
        mutate(fraction = number / year_total) %>% 
        arrange(name, year) %>%
        group_by(name) %>%
        mutate(ratio = fraction / lag(fraction)) %>% 
        filter(fraction >= 0.00001) %>% 
        top_n(1, ratio) %>%
        arrange(desc(ratio)) %>%
        filter(fraction > 0.001)

Di sini terlihat bahwa nama “Tammy” memiliki lonjakan penggunaan nama terbesar pada tahun 1960, disusul dengan nama “Nevaeh” pad tahun 2005, dan seterusnya.