Gabungkan Bingkai Data di R: Pencocokan Penuh dan Sebagian
Seringkali, kami memiliki data dari berbagai sumber. Untuk melakukan analisis, kita perlu bergabung dua kerangka data bersama dengan satu atau lebih variabel kunci umum.
Dalam tutorial ini, Anda akan belajar
Pertandingan penuh
Pencocokan penuh mengembalikan nilai yang memiliki pasangannya di tabel tujuan. Nilai yang tidak cocok tidak akan dikembalikan dalam bingkai data baru. Namun, pencocokan parsial mengembalikan nilai yang hilang sebagai NA.
Kita akan melihat yang sederhana bergabung dalam. Kata kunci inner join memilih rekaman yang memiliki nilai yang cocok di kedua tabel. Untuk menggabungkan dua dataset, kita dapat menggunakan fungsi merge(). Kami akan menggunakan tiga argumen:
merge(x, y, by.x = x, by.y = y) Arguments: -x: The origin data frame -y: The data frame to merge -by.x: The column used for merging in x data frame. Column x to merge on -by.y: The column used for merging in y data frame. Column y to merge on
Contoh:
Buat Kumpulan Data Pertama dengan variabel
- nama keluarga
- kebangsaan
Buat Kumpulan Data Kedua dengan variabel
- nama keluarga
- bioskop
Variabel kunci umum adalah nama keluarga. Kita dapat menggabungkan kedua data dan memeriksa apakah dimensinya 7ร3.
Kami menambahkan stringsAsFactors=FALSE dalam bingkai data karena kami tidak menginginkannya R untuk mengonversi string sebagai faktor, kami ingin variabel diperlakukan sebagai karakter.
# Create origin dataframe(
producers <- data.frame(
surname = c("Spielberg","Scorsese","Hitchcock","Tarantino","Polanski"),
nationality = c("US","US","UK","US","Poland"),
stringsAsFactors=FALSE)
# Create destination dataframe
movies <- data.frame(
surname = c("Spielberg",
"Scorsese",
"Hitchcock",
"Hitchcock",
"Spielberg",
"Tarantino",
"Polanski"),
title = c("Super 8",
"Taxi Driver",
"Psycho",
"North by Northwest",
"Catch Me If You Can",
"Reservoir Dogs","Chinatown"),
stringsAsFactors=FALSE)
# Merge two datasets
m1 <- merge(producers, movies, by.x = "surname")
m1
dim(m1)
Keluaran:
surname nationality title 1 Hitchcock UK Psycho 2 Hitchcock UK North by Northwest 3 Polanski Poland Chinatown 4 Scorsese US Taxi Driver 5 Spielberg US Super 8 6 Spielberg US Catch Me If You Can 7 Tarantino US Reservoir Dogs
Mari gabungkan bingkai data ketika variabel kunci umum memiliki nama berbeda.
Kami mengubah nama keluarga menjadi nama dalam bingkai data film. Kami menggunakan fungsi identik (x1, x2) untuk memeriksa apakah kedua kerangka data identik.
# Change name of ` movies ` dataframe colnames(movies)[colnames(movies) == 'surname'] <- 'name' # Merge with different key value m2 <- merge(producers, movies, by.x = "surname", by.y = "name") # Print head of the data head(m2)
Keluaran:
##surname nationality title ## 1 Hitchcock UK Psycho ## 2 Hitchcock UK North by Northwest ## 3 Polanski Poland Chinatown ## 4 Scorsese US Taxi Driver ## 5 Spielberg US Super 8 ## 6 Spielberg US Catch Me If You Can
# Check if data are identical identical(m1, m2)
Keluaran:
## [1] TRUE
Ini menunjukkan bahwa operasi penggabungan dilakukan meskipun nama kolom berbeda.
Pertandingan sebagian
Tidak mengherankan jika dua kerangka data tidak memiliki variabel kunci yang sama. Dalam pencocokan penuh, kerangka data kembali hanya baris ditemukan di bingkai data x dan y. Dengan penggabungan sebagian, dimungkinkan untuk menyimpan baris tanpa baris yang cocok di bingkai data lainnya. Baris-baris ini akan memiliki NA di kolom-kolom yang biasanya diisi dengan nilai-nilai dari y. Kita dapat melakukannya dengan menyetel all.x= TRUE.
Misalnya, kita dapat menambahkan produser baru, Lucas, di bingkai data produser tanpa referensi film di bingkai data film. Jika kita menyetel all.x= FALSE, R hanya akan menggabungkan nilai yang cocok di kedua kumpulan data. Dalam kasus kami, produser Lucas tidak akan bergabung dalam penggabungan karena hilang dari satu kumpulan data.
Mari kita lihat dimensi setiap keluaran ketika kita menentukan all.x= TRUE dan ketika tidak.
# Create a new producer
add_producer <- c('Lucas', 'US')
# Append it to the ` producer` dataframe
producers <- rbind(producers, add_producer)
# Use a partial merge
m3 <-merge(producers, movies, by.x = "surname", by.y = "name", all.x = TRUE)
m3
Keluaran:
# Compare the dimension of each data frame dim(m1)
Keluaran:
## [1] 7 3
dim(m2)
Keluaran:
## [1] 7 3
dim(m3)
Keluaran:
## [1] 8 3
Seperti yang bisa kita lihat, dimensi bingkai data baru adalah 8ร3 dibandingkan dengan 7ร3 untuk m1 dan m2. R menyertakan NA untuk penulis yang hilang dalam kerangka data buku.

